Importante

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!

1
resposta

[Projeto] Faça como eu fiz: gerador de funções personalizadas

valor = float(input('Digite o valor da compra: '))
escolha = input("Deseja aplicar '[D]esconto' ou '[A]créscimo'? ").upper()

def usarDesconto(percentual):
    
    def desconto(valor):
        return valor - valor*(percentual/100)
    return desconto

def criar_acrescimo(valorAcres):
    def acrescimo(valor):
        return valor + valorAcres
    return acrescimo

if escolha.upper() == 'D':
    percentual = int(input('Digite a porcentagem de desconto: '))
        
    descontoAplicado = usarDesconto(percentual) # 'percentual' vem da sua entrada
    precoComDesconto = descontoAplicado(valor) # 'valor' vem da sua entrada

    print(f'Preço final com desconto: R$ {precoComDesconto:.2f}') 

elif escolha.upper() == 'A':
    valorAcres = float(input('Digite o valor de acréscimo: '))
    
    acrescimoAplicado = criar_acrescimo(valorAcres)
    precoComAcrescimo = acrescimoAplicado(valor)

    print(f'Preço final com acréscimo: R$ {precoComAcrescimo:.2f}')
    
else:
    print('Mensagem de erro ou opção inválida')

Eu incrementei o problema caso o usuário queira calcular um acréscimo, no lugar do desconto.

1 resposta

Oi, Evandro. Tudo certo com você?

A sua implementação do gerador de funções personalizadas em Python ficou excelente, demonstrando uma ótima aplicação prática do conceito de closure para resolver o sistema de cupons de desconto. A iniciativa de ir além da atividade proposta e construir também uma lógica para o acréscimo enriqueceu muito a interatividade do programa. O seu código funciona perfeitamente, tratando corretamente os escopos das variáveis internas e retornando as funções internas com precisão.

Uma dica para o seu código envolve a função do acréscimo, que atualmente soma um valor absoluto. Se você desejar que o acréscimo funcione por meio de porcentagem, assim como fez no desconto, bastaria modificar a operação interna para multiplicar o valor pela taxa percentual dividida por cem, mantendo o mesmo padrão de comportamento do restante do sistema.

Pensando em cenários reais onde múltiplos descontos ou acréscimos podem ser aplicados em sequência sobre uma mesma compra, de que forma você imagina que poderíamos combinar essas funções geradas?

Parabéns pela dedicação em expandir o desafio, obrigado por compartilhar o seu projeto e lembre-se de que o fórum está sempre à disposição.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!