def criador_de_desconto(porcentagem):
"""Esta é a fábrica de closures."""
def aplicar(preco):
valor_desconto = preco * (porcentagem / 100)
return preco - valor_desconto, porcentagem
return aplicar
# --- Geramos as regras uma única vez (Memória do Sistema) ---
regras = {
"faixa1": criador_de_desconto(5),
"faixa2": criador_de_desconto(10),
"faixa3": criador_de_desconto(15),
"faixa4": criador_de_desconto(20),
"faixa5": criador_de_desconto(25),
"faixa6": criador_de_desconto(30)
}
def obter_regra(preco):
"""Seleciona a closure correta baseada no preço digitado."""
if preco <= 200: return regras["faixa1"]
if preco <= 400: return regras["faixa2"]
if preco <= 800: return regras["faixa3"]
if preco <= 1600: return regras["faixa4"]
if preco <= 3200: return regras["faixa5"]
return regras["faixa6"]
# --- Interação com o Usuário ---
try:
valor_digitado = float(input("Digite o valor do produto: R$ "))
# Buscamos a closure específica para esse preço
calculadora = obter_regra(valor_digitado)
# Executamos a closure (ela já sabe qual % aplicar internamente)
valor_final, porcentagem_usada = calculadora(valor_digitado)
print(f"\nResultado:")
print(f"Valor Original: R$ {valor_digitado:.2f}")
print(f"Regra aplicada: {porcentagem_usada}% de desconto")
print(f"Valor Final: R$ {valor_final:.2f}")
except ValueError:
print("Erro: Por favor, digite um número válido (ex: 1500.50).")