Solucionado (ver solução)

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!

Solucionado
(ver solução)
1
resposta

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

def generate_discount_function(discount_percentage):
    def apply_discount(purchase_value):
        discount_amount = purchase_value * (discount_percentage / 100)
        final_price = purchase_value - discount_amount
        return final_price
    return apply_discount

percentage_discount = float(input("Digite a porcentagem de desconto: "))
purchase_value = float(input("Digite o valor da compra: "))

discount_function = generate_discount_function(percentage_discount)
final_price = discount_function(purchase_value)
print(f"Preço final com desconto: {final_price}")
1 resposta
solução!

Oi, Julia! Como vai?

Trabalhar com um gerador como o generate_discount_function é uma ótima forma de explorar funções aninhadas em Python, e você fez isso de maneira muito clara.

A lógica que você criou é bem elegante. A função externa recebe discount_percentage como parâmetro e retorna a função interna apply_discount, que usa purchase_value para calcular o discount_amount e chegar ao final_price. Esse padrão é chamado de closure e permite criar comportamentos reutilizáveis e flexíveis, adaptando o desconto conforme necessário sem repetir código.

Outro ponto positivo é o uso de float combinado com input para capturar os valores digitados pelo usuário, garantindo que os cálculos sejam feitos com precisão. A variável percentage_discount recebe esse valor e alimenta toda a lógica da discount_function gerada.

Uma dica para deixar o resultado ainda mais apresentável é usar a função round() para controlar as casas decimais do final_price. Veja o exemplo:


final_price = round(discount_function(purchase_value), 2)
print(f"Preco final com desconto: {final_price}")

Assim, os valores exibidos ficam no formato esperado para aplicações financeiras, com apenas duas casas decimais.

Continue explorando esse conceito, pois closures e funções de ordem superior são recursos muito poderosos no dia a dia de quem programa em Python.

Que outros tipos de geradores de funções você acha que poderiam ser úteis em projetos reais?

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