1
resposta

[Projeto] gerador de funções personalizadas (closure)

def criar_desconto(percentual):
    def aplicar_desconto(valor):
        return valor - (valor * percentual / 100)
    
    return aplicar_desconto


while True:
    try:
        perc_desconto = float(input("Digite a porcentagem de desconto: "))
        valor = float(input("Digite o valor da compra: "))
        break
    except ValueError:
        print("Digite um valor numérico válido!")


desconto = criar_desconto(perc_desconto)

print(f"Preço final com desconto: {desconto(valor):.1f}")
1 resposta

Oi, Paulo! Como vai?

Agradeço por compartilhar.

Seu projeto ficou bem organizado ao usar uma closure com criar_desconto, já que a função interna aplicar_desconto mantém acesso ao percentual informado mesmo depois da função externa terminar. Também ficou legal o uso do try/except para validar a entrada do usuário.

Uma dica interessante para o futuro é criar uma pequena validação para evitar percentuais negativos ou acima de 100, deixando o programa mais seguro.

if perc_desconto < 0 or perc_desconto > 100:
    print("Digite um desconto entre 0 e 100")
else:
    desconto = criar_desconto(perc_desconto)
    print(f"Preco final com desconto: {desconto(valor):.2f}")

Esse trecho verifica se o desconto está dentro de um intervalo valido antes de aplicar a função, e o .2f mostra o preço com duas casas decimais. Pensando nesse projeto, quais outras funções personalizadas você criaria usando closure?

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