4
respostas

DESAFIO: HORA DA PRÁTICA "CAFETERIA ESCOLAR"

Projeto de Sistema de Fidelidade — Cafeteria Escolar
Introdução

INTRODUÇÃO

Ao iniciar meus estudos em programação, percebi que resolver exercícios isolados ajudava a compreender partes específicas da linguagem Python, mas nem sempre favorecia uma visão ampla sobre como sistemas computacionais são realmente estruturados.

Por esse motivo, decidi adotar uma abordagem diferente: em vez de abandonar os exercícios anteriores a cada novo conteúdo aprendido, optei por expandir progressivamente um mesmo projeto.

Essa decisão tornou o processo de aprendizagem mais significativo, pois permitiu conectar novos conceitos a uma estrutura já compreendida anteriormente. Assim, cada novo conteúdo passou a funcionar como uma ampliação lógica do sistema já iniciado.

Inicialmente, o projeto utilizava apenas variáveis, inputs e operadores matemáticos para registrar pedidos e calcular valores simples. Posteriormente, com o estudo das estruturas condicionais e dos operadores lógicos, o sistema começou a incorporar tomadas de decisão, validações, recompensas e regras automatizadas.

Além disso, o processo de revisão do projeto permitiu identificar possíveis falhas lógicas, duplicidades de benefícios e inconsistências de validação, favorecendo uma compreensão mais profunda sobre como sistemas reais precisam prever erros, conflitos de regras e comportamentos inesperados.

Essa experiência aproximou o processo de aprendizagem da lógica real da programação e da engenharia de software, nas quais sistemas evoluem continuamente por meio de correções, refinamentos e novas funcionalidades.

Também percebo que essa metodologia dialoga profundamente com minha atuação educacional, pois evidencia como a contextualização, a continuidade e a construção progressiva favorecem a aprendizagem de conceitos complexos.

Projeto da Cafeteria

OBJETIVO DO SISTEMA

O sistema deve:

  • registrar pedidos dos clientes;
  • calcular automaticamente o valor da compra;
  • verificar cadastro do cliente;
  • aplicar descontos progressivos;
  • liberar recompensas;
  • enviar mensagens automáticas de fidelização.

ESTRUTURA LÓGICA DO SISTEMA

  1. Cadastro
  • verificar se o cliente é cadastrado;
  • caso não seja, oferecer cadastro desde a primeira compra.
  1. Pedidos
  • registrar quantidade de itens;
  • registrar nome e valor de cada item;
  • calcular o valor total da compra.
  1. Desconto
  • verificar quantidade de visitas do cliente;
  • aplicar desconto progressivo a partir da terceira visita;
  • limitar o desconto máximo em 10%.
  1. Recompensas
  • liberar item gratuito a cada múltiplo de 10 visitas;
  • permitir escolha entre itens específicos;
  • criar regra especial de aniversário.
  1. Comunicação
  • apresentar resumo da compra;
  • enviar mensagem automática pelo WhatsApp com informações da compra e do programa de fidelidade.

REGRAS DEFINIDAS PARA O SISTEMA

Desconto progressivo

Menos de 3 visitas → sem desconto
3 visitas → 3% de desconto
4 visitas → 4% de desconto
5 visitas → 5% de desconto
...
10 visitas ou mais → 10% de desconto

Recompensa por recorrência

A cada múltiplo de 10 visitas:

  • o cliente recebe um item gratuito;
  • poderá escolher entre:
    • café;
    • pão de queijo;
    • cookie.

Regra especial de aniversário

Se:

  • for aniversário do cliente;
  • e o número de compras for igual ou maior que sua idade;

o cliente poderá escolher gratuitamente qualquer item presente no pedido atual.

CORREÇÕES REALIZADAS NO SISTEMA

Durante a revisão lógica do projeto, foram identificados possíveis problemas estruturais:

  • duplicidade de bônus;
  • validação frágil dos itens do pedido;
  • possibilidade de informar manualmente valores incorretos para itens gratuitos.

Para resolver esses problemas:

  • foi criada prioridade para o bônus de aniversário;
  • o sistema passou a impedir duplicidade de recompensas;
  • os itens do pedido passaram a ser armazenados em estrutura adequada;
  • os valores dos itens gratuitos passaram a ser recuperados diretamente do pedido.

ORDEM DO CÁLCULO

O sistema deverá:

  1. remover o valor do item gratuito;
  2. aplicar o desconto sobre o valor restante.

Essa lógica evita desconto sobre produtos já gratuitos.

4 respostas

PROGRAMA EM PYTHON

SISTEMA DE FIDELIDADE — CAFETERIA ESCOLAR

total_compra = 0
valor_item_gratis = 0
desconto_percentual = 0
bonus_aplicado = "Nenhum"

cliente_cadastrado = input("O cliente é cadastrado? (sim/não): ").lower()

if cliente_cadastrado == "não" or cliente_cadastrado == "nao":
print("Oferecer cadastro ao cliente.")
else:
print("Cliente já cadastrado.")

nome_cliente = input("Digite o nome do cliente: ")
visitas = int(input("Digite o número de visitas do cliente: "))
idade = int(input("Digite a idade do cliente: "))
aniversario = input("Hoje é aniversário do cliente? (sim/não): ").lower()

quantidade_itens = int(input("Quantos itens foram comprados? "))

pedido = {}

for i in range(quantidade_itens):
nome_item = input("Digite o nome do item: ").lower()
valor_item = float(input("Digite o valor do item: "))

pedido[nome_item] = valor_item
total_compra = total_compra + valor_item

REGRA ESPECIAL DE ANIVERSÁRIO (PRIORIDADE)

if aniversario == "sim" and visitas >= idade:

item_aniversario = input(
    "Cliente pode escolher qualquer item do pedido como gratuito: "
).lower()

if item_aniversario in pedido:
    valor_item_gratis = pedido[item_aniversario]
    bonus_aplicado = "Bônus de aniversário"

RECOMPENSA POR RECORRÊNCIA

elif visitas % 10 == 0 and visitas > 0:

escolha = input(
    "Cliente ganhou um item gratuito. Escolha: café, pão de queijo ou cookie: "
).lower()

if escolha in pedido:
    valor_item_gratis = pedido[escolha]
    bonus_aplicado = "Recompensa de recorrência"

DESCONTO PROGRESSIVO

valor_restante = total_compra - valor_item_gratis

if visitas < 3:
desconto_percentual = 0

elif visitas >= 3 and visitas < 10:
desconto_percentual = visitas

else:
desconto_percentual = 10

valor_desconto = valor_restante * (desconto_percentual / 100)

valor_final = valor_restante - valor_desconto

RESUMO DA COMPRA

print("----- RESUMO DA COMPRA -----")

print(f"Cliente: {nome_cliente}")
print(f"Total da compra: R$ {total_compra:.2f}")
print(f"Bônus aplicado: {bonus_aplicado}")
print(f"Valor do item gratuito: R$ {valor_item_gratis:.2f}")
print(f"Desconto aplicado: {desconto_percentual}%")
print(f"Valor do desconto: R$ {valor_desconto:.2f}")
print(f"Valor final: R$ {valor_final:.2f}")

MENSAGEM AUTOMÁTICA

print("----- MENSAGEM PARA WHATSAPP -----")

print(f"Olá, {nome_cliente}! Sua compra ficou em R$ {valor_final:.2f}.")
print(f"Você possui {visitas} visitas registradas em nosso programa de fidelidade.")
print("Continue comprando conosco para liberar novas recompensas!")

Olá, Patricia. Como vai?

Que espetáculo de projeto! O sistema da "Cafeteria Escolar" traduz regras de negócio complexas em uma lógica limpa com Python. Parabéns pela organização e visão metodológica.

Analisei o seu código e separei os pontos de sintaxe e lógica que podem gerar erros na execução.

1. Acúmulo do Valor Total (Sintaxe)

No laço for, a linha do total_compra ficou fora da indentação ao colar no fórum. Se ficar fora, ela só somará o último item.

  • Correção: Alinhe a linha dentro do bloco do for.
for i in range(quantidade_itens):
    nome_item = input("Digite o nome do item: ").lower()
    valor_item = float(input("Digite o valor do item: "))
    pedido[nome_item] = valor_item
    total_compra = total_compra + valor_item # Dentro do loop

2. O Item de Recorrência Não Comprado (Lógica)

Na Recompensa por Recorrência, se o operador selecionar "café", mas o cliente ainda não tiver adicionado o item ao dicionário pedido, a condição if escolha in pedido será falsa e o cliente perderá o benefício.

  • Dica: O ideal é que o produto seja inserido no pedido com valor zerado ou consultado em uma tabela padrão de preços para ser deduzido.

3. Condicionais na Mesma Linha (Sintaxe)

O código juntou a estrutura do if na mesma linha do fechamento do comando anterior, o que causa um SyntaxError. O Python depende estritamente das quebras de linha e indentação.


Código Refatorado e Seguro

Aqui está o código consolidado com as correções de quebras de linha, indentação e sintaxe para rodar perfeitamente:

total_compra = 0
valor_item_gratis = 0
desconto_percentual = 0
bonus_aplicado = "Nenhum"

print("--- SISTEMA DE FIDELIDADE — CAFETERIA ESCOLAR ---")

cliente_cadastrado = input("O cliente é cadastrado? (sim/não): ").lower()
if cliente_cadastrado in ["não", "nao"]:
    print("Oferecer cadastro ao cliente.")
else:
    print("Cliente já cadastrado.")

nome_cliente = input("Digite o nome do cliente: ")
visitas = int(input("Digite o número de visitas do cliente: "))
idade = int(input("Digite a idade do cliente: "))
aniversario = input("Hoje é aniversário do cliente? (sim/não): ").lower()
quantidade_itens = int(input("Quantos itens foram comprados? "))

pedido = {}
for i in range(quantidade_itens):
    nome_item = input(f"Digite o nome do item {i+1}: ").lower()
    valor_item = float(input(f"Digite o valor de '{nome_item}': "))
    pedido[nome_item] = valor_item
    total_compra += valor_item

# REGRA ESPECIAL DE ANIVERSÁRIO (PRIORIDADE)
if aniversario == "sim" and visitas >= idade:
    item_aniversario = input("Aniversariante! Escolha qualquer item do pedido para sair grátis: ").lower()
    if item_aniversario in pedido:
        valor_item_gratis = pedido[item_aniversario]
        bonus_aplicado = "Bônus de aniversário"

# RECOMPENSA POR RECORRÊNCIA
elif visitas % 10 == 0 and visitas > 0:
    escolha = input("Ganhou recompensa! Escolha entre: café, pão de queijo ou cookie: ").lower()
    if escolha in pedido:
        valor_item_gratis = pedido[escolha]
        bonus_aplicado = "Recompensa de recorrência"
    else:
        print(f"Atenção: O item '{escolha}' precisa estar no pedido para receber o desconto.")

# DESCONTO PROGRESSIVO
valor_restante = total_compra - valor_item_gratis
if visitas < 3:
    desconto_percentual = 0
elif 3 <= visitas < 10:
    desconto_percentual = visitas
else:
    desconto_percentual = 10

valor_desconto = valor_restante * (desconto_percentual / 100)
valor_final = valor_restante - valor_desconto

# RESUMO DA COMPRA
print("\n" + "-"*5 + " RESUMO DA COMPRA " + "-"*5)
print(f"Cliente: {nome_cliente}")
print(f"Total da compra: R$ {total_compra:.2f}")
print(f"Bônus aplicado: {bonus_aplicado}")
print(f"Valor do item gratuito: R$ {valor_item_gratis:.2f}")
print(f"Desconto aplicado: {desconto_percentual}%")
print(f"Valor do desconto: R$ {valor_desconto:.2f}")
print(f"Valor final: R$ {valor_final:.2f}")

# MENSAGEM AUTOMÁTICA
print("\n" + "-"*5 + " MENSAGEM PARA WHATSAPP " + "-"*5)
print(f"Olá, {nome_cliente}! Sua compra ficou em R$ {valor_final:.2f}.")
print(f"Você possui {visitas} visitas registradas em nosso programa de fidelidade.")
print("Continue comprando conosco para liberar novas recompensas!")

Sua linha de raciocínio é exemplar. Como próximos passos, sugiro incluir funções (def) para organizar melhor as ações e o uso de uma lista de dicionários para permitir a compra de mais de uma unidade do mesmo item. Parabéns!

Espero que possa ter lhe ajudado!

Entendi, professor, obrigada! Como faço isso: Como próximos passos, sugiro incluir funções (def)?

Observei que no próximo módulo, aprenderei sobre essas sugestões que você me apresentou.