Olá, Aristóteles! Tudo ótimo por aqui, e com você?
Parabéns pela excelente resolução do desafio! O conceito que você aplicou aqui é um dos recursos mais elegantes e sofisticados da programação funcional: o Closure (Fechamento), combinado com o uso de Funções de Alta Ordem (quando uma função recebe ou retorna outra função).
A sua implementação ficou impecável. No mercado de trabalho, essa técnica é amplamente utilizada para criar geradores de código, configurar middlewares e encapsular estados de forma limpa.
Por que a sua solução é brilhante?
Quando você executa o comando calculadora = criar_calculadora_desconto(desconto), acontece uma mágica por trás dos panos do Python. A função externa termina de rodar, mas a função interna (aplicar_desconto) consegue "lembrar" do valor da variável desconto que foi passado lá no início.
É como se você tivesse construído uma fábrica de calculadoras sob medida:
- Se você passar
10, a variável calculadora vira uma função que dá 10% de desconto. - Se você passar
20, ela vira outra função, totalmente independente, que dá 20% de desconto.
Uma dica de "Python Pro" para o seu código
Como você usou as entradas de dados (input) direto no fluxo principal, se o usuário digitar o valor da compra como R$ 200,50, o preço final vai sair com várias casas decimais (ex: 180.45000000000002) devido à forma como os computadores processam números de ponto flutuante (float).
Para deixar a saída do seu gerador com uma carinha mais profissional de sistema de vendas, você pode formatar o print usando f-strings com limite de duas casas decimais:
# Adicionando o :.2f para formatar os centavos
print(f"Preço final com desconto: R$ {preco_final:.2f}")
Dessa forma, a sua saída para a entrada informada passaria a ser:
Preço final com desconto: R$ 180.00
O seu raciocínio lógico e a compreensão dessa arquitetura de funções aninhadas mostram que você já passou da barreira do básico e está escrevendo um código Python muito maduro. Excelente trabalho!
Espero que possa ter lhe ajudado!