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!

3
respostas

Systema de Atendimento para Cafeteria.(Em PYTHON)

O systema conta com validação de segurança que garante que a quantidade de itens seja um número inteiro, que o preço seja um número válido e não negativo e que a resposta sobre o cadastro seja sim ou não. Usa try/except para capturar entrada inválida sem quebrar, o sistema só avança quando os dados são válidos.

def sistema_atendimento( ):
print("=== Sistema de Atendimento ===")

# Validação quantidade de itens

while True:
     try:
        qtd_itens = int(input(" Quantos itens o cliente vai pedir ?  "))
        if qtd_itens <= 0:
            print(" Digite um número. ")
            continue
        break
    except ValueError:
        print(" Entrada inválida. Digite um número. ")

total = 0
pedidos = []

# Registro dos pedidos e validação de preço

for i in range(qtd_itens):
    produto = input(f"Nome do produto {i+1}: ")
    while True:
        try:
            preco = float(input(f"Preço do produto {i+1}: R$ "))
            if preco < 0:
                print(" Preço não pode ser inválido. Digite novamente. ")
                continue
            break
        except ValueError:
            print(" Entrada inválida. Digite um valor. ")
    pedidos.append((produto, preco))
    total += preco

# Exibe resumo dos pedidos.
print("\n--- Resumo do Pedido ---")
for produto, preco in pedidos:
    print(f"{produto} - R$ {preco:.2f}")
print(f"Total sem desconto: R$ {total:.2f}")

# Verifica se cliente é cadastrado
while True:
    cadastrado = input("O cliente é cadastrado? (s/n): ").strip().lower()
    if cadastrado in ["s", "n"]:
        break
    else:
        print(" Entrada inválida. Digite 's' para sim ou 'n' para não. ")

if cadastrado == "s":
    desconto = total * 0.10
    total_com_desconto = total - desconto
    print(f"Desconto aplicado: R$ {desconto:.2f}")
    print(f"Total com desconto: R$ {total_com_desconto:.2f}")
else:
    print(" Cliente não cadastrado. Valor final sem desconto. ")
    print(f"Total a pagar: R$ {total:.2f}")

print("\nAtendimento finalizado.")

Executa o sistema

if name == "main":
sistema_atendimento()

3 respostas

Oi, José. Tudo bem com você?

Obrigado por compartilhar sua solução para o desafio do sistema de atendimento da cafeteria. Além de atender aos requisitos propostos, você adicionou validações para a quantidade de itens, preço dos produtos e resposta sobre o cadastro do cliente, tornando a aplicação mais robusta diante de entradas inválidas. O uso de try/except para tratar exceções também demonstra uma preocupação importante com a experiência de quem utiliza o programa, evitando interrupções inesperadas durante a execução. Essa é uma prática bastante utilizada em aplicações reais.

Pensando na continuidade desse projeto, como você organizaria o código caso a cafeteria passasse a oferecer diferentes formas de pagamento ou cupons de desconto?

Parabéns pelo empenho em enriquecer a atividade com validações adicionais. Continue compartilhando suas soluções. O fórum está à disposição para acompanhar sua evolução.

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

Boa tarde Mike de Souza, desculpe a demora... sege o código com as modificações solicitadas.
Foi adicionado "cupom de desconto onde o cliente pode digitar um código (promo10, promo20 ) e ganhar desconto adicional.
As formas de pagamento como:
Dinheiro, cartão de crédito, débito ou Pix, também foram acrescidas sem alterações no código anterior que caso seja solicitado poderá ainda receber outras moedas e pagamentos eletrônicos como PayPal, Apple Play, Google Play e etc.

# Validação quantidade de itens.

while True:
    try:
        qtd_itens = int(input("Quantos itens o cliente vai pedir? "))
        if qtd_itens <= 0:
            print("Digite um número válido.")
            continue
        break
    except ValueError:
        print("Entrada inválida. Digite um número.")

total = 0
pedidos = []

# Registro dos pedidos e validação de preço.

for i in range(qtd_itens):
    produto = input(f"Nome do produto {i+1}: ")
    while True:
        try:
            preco = float(input(f"Preço do produto {i+1}: R$ "))
            if preco < 0:
                print("Preço não pode ser negativo. Digite novamente.")
                continue
            break
        except ValueError:
            print("Entrada inválida. Digite um valor numérico.")
    pedidos.append((produto, preco))
    total += preco

# Exibe resumo dos pedidos.

print("\n--- Resumo do Pedido ---")
for produto, preco in pedidos:
    print(f"{produto} - R$ {preco:.2f}")
print(f"Total sem desconto: R$ {total:.2f}")

 # Verifica se cliente é cadastrado.
 
while True:
    cadastrado = input("O cliente é cadastrado? (s/n): ").strip().lower()
    if cadastrado in ["s", "n"]:
        break
    else:
        print("Entrada inválida. Digite 's' para sim ou 'n' para não.")

if cadastrado == "s":
    desconto = total * 0.10
    total -= desconto
    print(f"Desconto aplicado: R$ {desconto:.2f}")
    print(f"Total com desconto: R$ {total:.2f}")
else:
    print("Cliente não cadastrado. Valor final sem desconto.")
    print(f"Total a pagar: R$ {total:.2f}")

# Aplica cupom de desconto.

cupom = input("Digite o cupom de desconto (ou pressione Enter para ignorar): ").strip().lower()
cupons_validos = {"promo10": 0.10, "promo20": 0.20}

if cupom in cupons_validos:
    desconto_cupom = total * cupons_validos[cupom]
    total -= desconto_cupom
    print(f"Cupom '{cupom}' aplicado: R$ {desconto_cupom:.2f}")
    print(f"Total após cupom: R$ {total:.2f}")
else:
    if cupom != "":
        print("Cupom inválido. Nenhum desconto aplicado.")

# Formas de pagamento.

print("\n--- Formas de Pagamento ---")
print("1 - Dinheiro")
print("2 - Cartão de Crédito")
print("3 - Cartão de Débito")
print("4 - Pix")

while True:
    forma_pagamento = input("Escolha a forma de pagamento (1-4): ").strip()
    if forma_pagamento in ["1", "2", "3", "4"]:
        break
    else:
        print("Opção inválida. Escolha entre 1 e 4.")

formas = {
    "1": "Dinheiro",
    "2": "Cartão de Crédito",
    "3": "Cartão de Débito",
    "4": "Pix"
}

print(f"\nForma de pagamento escolhida: {formas[forma_pagamento]}")
print(f"Total final a pagar: R$ {total:.2f}")
print("\nAtendimento finalizado.")

Oi, José.

Obrigado por compartilhar a atualização do projeto. As melhorias fazem sentido e mostram uma evolução em relação à versão anterior. A inclusão dos cupons de desconto utilizando um dicionário tornou a implementação simples e fácil de expandir, bastando adicionar novos pares de chave e valor. A seleção da forma de pagamento também ficou organizada, com validação da entrada e mapeamento para uma descrição mais legível. Sua observação sobre a possibilidade de adicionar novos meios de pagamento no futuro demonstra que você já está pensando na escalabilidade da aplicação. Esse é um bom hábito durante o desenvolvimento de software.

Continue praticando dessa forma.