Olá, Luísa. Como vai?
O seu código ficou excelente! Você aplicou um conceito avançado e extremamente poderoso no Python chamado Closures (ou funções internas), combinado com o conceito de funções de primeira classe (onde uma função pode receber ou retornar outra função).
A sua estrutura está muito bem desenhada: a função externa criar_cupom recebe a porcentagem e "lembra" desse valor, gerando uma nova função personalizada (aplicar_desconto) que sabe exatamente quanto aplicar de desconto quando for chamada mais tarde.
Gostaria de destacar duas ótimas práticas que você utilizou no seu script:
- **O uso do
if __name__ == "__main__":**: Isso é uma excelente prática no Python, pois garante que o bloco de teste e interação com o usuário só seja executado se o arquivo for rodado diretamente, permitindo que suas funções sejam importadas em outros arquivos no futuro sem gerar efeitos colaterais. - **Tratamento de strings com
.replace()**: Pensar em substituir a vírgula pelo ponto na entrada do desconto evita que o programa quebre se o usuário digitar o padrão brasileiro (ex: 15,5).
Como o objetivo da atividade é praticar e aprofundar, notei um pequeno detalhe na linha onde você recebe o valor_compra. Você utilizou .replace(",", "") (substituindo a vírgula por nada). Se o usuário digitar um valor como 100,50, o Python vai entender como 10050.0, aumentando drasticamente o preço. O ideal seria manter o mesmo padrão que você usou no desconto: .replace(",", ".").
Para expandir ainda mais o seu projeto e ver o poder real dessa estrutura que você criou, veja como as closures permitem que você crie múltiplos cupons diferentes no mesmo código sem precisar reescrever a lógica matemática:
def criar_cupom(porcentagem):
def aplicar_desconto(preco_original):
return preco_original * (1 - porcentagem / 100)
return aplicar_desconto
if __name__ == "__main__":
# Criando fábricas de cupons fixos para o seu sistema
cupom_black_friday = criar_cupom(50)
cupom_cliente_novo = criar_cupom(10)
valor_produto = 200.0
# Aplicando os cupons dinamicamente
print(f"Preço na Black Friday: R${cupom_black_friday(valor_produto):.2f}")
print(f"Preço para Cliente Novo: R${cupom_cliente_novo(valor_produto):.2f}")
Dessa forma, a função criar_cupom funciona como uma verdadeira "fábrica" de descontos personalizados, tornando o seu código limpo, modular e muito elegante. Parabéns pelo excelente trabalho no desafio!
Espero que possa ter lhe ajudado!