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!

1
resposta

[Desafio] Simulador de pedidos em uma cafeteria

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()
1 resposta

Oi, Eugênio. Tudo bem com você?

Obrigado por compartilhar sua solução para o desafio do simulador de pedidos em uma cafeteria. Sua implementação amplia a proposta inicial de forma coerente, principalmente ao utilizar a lista lista_pedidos para armazenar o nome e o preço de cada item. Essa decisão permite gerar um resumo completo da compra, tornando a saída mais útil para quem está utilizando o sistema. Além disso, a validação da quantidade de itens e dos preços, com tratamento de ValueError, contribui para que o programa lide melhor com entradas inválidas, evitando interrupções inesperadas durante a execução.

O uso de um while para repetir a leitura até que um valor válido seja informado é uma abordagem bastante utilizada em aplicações de linha de comando. Também foi interessante calcular o desconto separadamente antes de exibir o valor final, deixando o processamento mais organizado. Como evolução, você poderia considerar validar também a resposta do cadastro (s ou n), garantindo que outras entradas não sejam aceitas.

Pensando em uma próxima evolução do projeto, como você organizaria esse sistema utilizando funções menores para separar o cadastro dos itens, o cálculo do desconto e a emissão do cupom?

Parabéns pelo desenvolvimento da atividade e por compartilhar sua solução. Continue praticando e trazendo suas implementações para o fórum. Estamos à disposição para acompanhar sua evolução.

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