No desafio original perdia o nome dos itens. Ao usar uma lista lista_pedidos, o sistema agora gera um resumo do que foi consumido, o que é essencial para qualquer caixa de loja.
O sistema agora é "à prova de erros". Se o atendente digitar um preço com vírgula ou por engano digitar um valor negativo, o código bloqueia a entrada e pede a correção, sem fechar o programa.
A saída detalhada traz transparência ao cliente, mostrando o valor bruto, o desconto (se houver) e o valor final, evitando desconfianças.
def sistema_cafeteria():
print("--- Sistema de Atendimento Cafeteria Pro ---")
# 1. Entrada de quantidade com validação
while True:
try:
qtd_itens = int(input("Quantos itens o cliente vai pedir? "))
if qtd_itens > 0:
break
print("Por favor, digite um número maior que zero.")
except ValueError:
print("Entrada inválida. Digite um número inteiro.")
lista_pedidos = []
total = 0.0
# 2. Loop para registrar cada item
for i in range(1, qtd_itens + 1):
nome_item = input(f"Nome do item {i}: ")
while True:
try:
preco_item = float(input(f"Preço do item {i}: R$ "))
if preco_item >= 0:
break
print("Preço não pode ser negativo.")
except ValueError:
print("Preço inválido. Digite um valor numérico.")
lista_pedidos.append((nome_item, preco_item))
total += preco_item
# 3. Processamento de Cadastro e Desconto
cadastrado = input("O cliente é cadastrado? (s/n): ").lower() == 's'
if cadastrado:
desconto = total * 0.10
total_final = total - desconto
status_desconto = f"Desconto aplicado: R$ {desconto:.2f}"
else:
total_final = total
status_desconto = "Cliente não cadastrado (sem desconto)."
# 4. Saída (Cupom Fiscal)
print("\n--- RESUMO DO PEDIDO ---")
for item, preco in lista_pedidos:
print(f"{item}: R$ {preco:.2f}")
print("------------------------")
print(f"Total bruto: R$ {total:.2f}")
print(status_desconto)
print(f"VALOR FINAL: R$ {total_final:.2f}")
sistema_cafeteria()