class ConversaoFloatError(Exception):
"""Exceção personalizada para erro de conversão em float."""
pass
def ler_entrada(texto) -> str:
return input(texto).strip()
def converter_entrada(valor_entrada: str) -> float :
if not valor_entrada:
raise ConversaoFloatError("Entrada vazia não pode ser convertida em float")
try:
return float(valor_entrada)
except (TypeError, ValueError) as e:
raise ConversaoFloatError(f"Não foi possível converter '{valor_entrada}' em float") from e
def porcentagem_desconto(valor_desconto: float):
def aplicar(valor: float) -> float:
return valor - (valor * valor_desconto / 100)
return aplicar
def formatar_resultado(resultado: float) -> str:
return f"Preço final com desconto: {resultado:.2f}"
def executar_fluxo() -> None:
texto_desconto = 'Digite a porcentagem de desconto: '
texto_compra = 'Digite o valor da compra: '
try:
desconto_float = converter_entrada(ler_entrada(texto_desconto))
compra_float = converter_entrada(ler_entrada(texto_compra))
desconto_sobre_compra = porcentagem_desconto(desconto_float)
preco_com_desconto = desconto_sobre_compra(compra_float)
print(formatar_resultado(preco_com_desconto))
except ConversaoFloatError as e:
print("Erro de conversão:", e)
if __name__ == "__main__":
executar_fluxo()