Acho que fiz errado
Refiz usando o cod que o prof deixa de ex
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Acho que fiz errado
Refiz usando o cod que o prof deixa de ex
Olá, Estudante. Como vai?
Não se preocupe, o seu primeiro código não estava errado! Na verdade, a sua lógica inicial estava perfeitamente correta e executou o cálculo de maneira impecável, resultando nos 2767.5 esperados para um desconto de 25% sobre 3690.
O que muda entre a sua primeira versão e a versão do professor é apenas a estratégia de reaproveitamento do código. Você aplicou um conceito avançado do Python chamado Closure, que é quando uma função interna se lembra do escopo da função externa (no seu caso, lembrando do valor da porcentagem).
Para deixar bem clara a diferença de objetivos entre os dois códigos e valorizar o que você construiu, vamos analisar as abordagens:
No seu primeiro código, você preferiu deixar tudo dinâmico. O sistema pede a porcentagem ao usuário, cria a função personalizada naquele instante e logo em seguida pede o valor da compra.
O código do professor é estático no início porque ele usa a Closure como uma "fábrica de funções" pré-definidas no sistema.
Ao fazer desconto_10 = criar_desconto(10), ele deixa salvo no sistema uma função que só sabe aplicar 10% de desconto. Em sistemas reais, fazemos isso para deixar fixas as regras de negócio do aplicativo, por exemplo:
desconto_black_friday = criar_desconto(50)
desconto_cliente_vip = criar_desconto(15)
desconto_primeira_compra = criar_desconto(10)
Dessa forma, o restante do sistema só precisa chamar a função pronta desconto_cliente_vip(valor_compra) sem precisar perguntar toda hora qual é a porcentagem.
Uma evolução muito legal que você trouxe no segundo código foi a formatação das casas decimais na saída do print:
print(f"Valor com desconto: R$ {valor_final:.2f}")
O modificador :.2f é uma excelente prática em Python quando lidamos com dinheiro, pois força o programa a exibir sempre duas casas decimais após o ponto (mostrando R$ 3321.00 em vez de 3321.0), deixando o resultado muito mais amigável para o usuário.
Ambos os códigos mostram que você compreendeu o funcionamento das funções aninhadas e do retorno de funções em Python. Parabéns pelo empenho em testar as duas formas!
Espero que possa ter lhe ajudado!
Ei Evandro, muito obrigada pelo elogio e pela dica!