Módulo 10 - Listas em Python
Prática: lista de compras interativa com menu
12 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026
O que você vai aprender
- Planejar um programa com menu a partir das opções que ele oferece.
- Combinar while, if, for e os métodos de lista num programa único.
- Tratar entradas problemáticas: item ausente, lista vazia, opção inválida.
- Concluir e testar o programa mais completo do curso até aqui.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: Prática: lista de compras interativa com menu.
Os objetivos desta aula. Planejar um programa com menu a partir das opções que ele oferece. Combinar while, if, for e os métodos de lista num programa único. Tratar entradas problemáticas: item ausente, lista vazia, opção inválida. Concluir e testar o programa mais completo do curso até aqui.
Veja o essencial, parte por parte.
O projeto e o plano de ataque. O projeto: uma lista de compras com menu de 4 opções que roda até o usuário escolher sair.
O programa completo, bloco a bloco. Indentação: os blocos do if/elif ficam 4 espaços dentro do while, e o conteúdo deles, 4 espaços além.
Desafios extras: deixe o programa com a sua cara. O programa funciona, mas quem para na primeira versão perde a melhor parte do aprendizado.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
O projeto e o plano de ataque
Este é o momento do módulo em que a leitura vira construção. O programa: uma lista de compras que funciona de verdade, daquelas de usar antes de ir ao mercado. Ele mostra um menu com quatro opções: adicionar item, ver a lista, remover item e sair. O usuário navega quantas vezes quiser, e o programa só encerra na opção de sair. Nenhuma peça é nova; a engenharia está em juntá-las.
Antes de escrever qualquer linha, o plano. Programador experiente não sai digitando: mapeia as partes e reconhece o que já sabe fazer. O menu que repete é o while True com break do módulo 8. Escolher a ação conforme a opção é o if/elif do módulo 7. E cada ação é uma operação de lista deste módulo. O mapa completo fica assim.
- Criar a lista vazia antes do loop: compras = [].
- Abrir o menu num while True, mostrando as 4 opções numeradas a cada volta.
- Opção 1, adicionar: input do item + append (com not in para evitar repetido, no desafio).
- Opção 2, ver a lista: for com enumerate(start=1); se estiver vazia, avisar em vez de mostrar nada.
- Opção 3, remover: input do item; se in na lista, remove; senão, avisar que não foi encontrado.
- Opção 4, sair: mensagem de despedida e break para encerrar o loop.
- Qualquer outra digitação: avisar que a opção é inválida e voltar ao menu.
Repare nos itens 4, 5 e 7 do plano: são os casos de borda, as situações em que o usuário não coopera. Lista vazia, item que não existe, opção fora do menu. Programa de iniciante quebra nesses pontos; programa bem feito responde com uma mensagem clara e segue o baile. É essa camada de cuidado que separa o exercício de aula do software que dá gosto de usar.
O programa completo, bloco a bloco
Aqui está o programa inteiro. Antes de rodar, leia com calma, de cima para baixo, dizendo em voz baixa o que cada linha faz; você vai perceber que consegue narrar tudo. Depois digite no Playground ou no seu computador, sem copiar e colar, e teste cada opção do menu, inclusive as respostas erradas de propósito.
compras = []
print("=== LISTA DE COMPRAS ===")
while True:
print("\n1 - Adicionar item")
print("2 - Ver a lista")
print("3 - Remover item")
print("4 - Sair")
opcao = input("Escolha uma opção: ")
if opcao == "1":
item = input("Qual item deseja adicionar? ").strip().lower()
compras.append(item)
print(f"{item} adicionado! A lista tem {len(compras)} item(ns).")
elif opcao == "2":
if len(compras) == 0:
print("A lista está vazia. Adicione o primeiro item!")
else:
print("Sua lista de compras:")
for i, item in enumerate(compras, start=1):
print(f"{i} - {item}")
elif opcao == "3":
item = input("Qual item deseja remover? ").strip().lower()
if item in compras:
compras.remove(item)
print(f"{item} removido da lista.")
else:
print(f"{item} não está na lista.")
elif opcao == "4":
print("Boas compras! Até a próxima.")
break
else:
print("Opção inválida. Digite 1, 2, 3 ou 4.")O programa completo: 4 opções, casos de borda tratados e todos os conceitos do módulo em ação.
Três decisões do código merecem atenção. Primeira: o strip().lower() nos inputs de item padroniza a digitação, tirando espaços das pontas e baixando maiúsculas; sem isso, Café e café virariam itens diferentes e o remove falharia. Segunda: a opção 2 confere len(compras) == 0 antes do for, porque um for em lista vazia simplesmente não imprime nada, e o silêncio confundiria o usuário; a mensagem explica a situação. Terceira: a remoção usa o escudo if item in compras da aula 6, trocando o ValueError por uma resposta educada.
Teste com este roteiro: adicione arroz, feijão e café; veja a lista e confira a numeração começando no 1; remova o feijão; tente remover pizza e observe o aviso; peça a lista de novo; digite 9 no menu para ver a mensagem de opção inválida; e saia com a opção 4. Se tudo respondeu como o esperado, você acabou de concluir o programa mais completo do curso até aqui, com estado que muda, decisões e um ciclo de vida de verdade.
Desafios extras: deixe o programa com a sua cara
O programa funciona, mas quem para na primeira versão perde a melhor parte do aprendizado. Os desafios abaixo usam só o que o módulo ensinou e transformam o exercício num programa seu. Tente cada um sem olhar as dicas primeiro; a luta com o problema é onde a habilidade cresce.
- Sem duplicados: na opção 1, só dê append se o item not in compras; se já existir, avise que ele já está na lista.
- Contador na despedida: ao sair, mostre quantos itens ficaram na lista, usando len().
- Item mais repetido: se você NÃO fizer o desafio 1, aceite repetidos e crie uma opção que mostra quantas vezes um item aparece, com count().
- Limpar tudo: acrescente uma opção 5 que esvazia a lista de uma vez (o clear() do FAQ da aula 4, ou um while com pop).
- Primeiro da lista: mostre, ao ver a lista, qual é o primeiro item a pegar no mercado, usando compras[0] com a devida checagem de lista vazia.
O desafio 1 é o mais valioso: not in guardando a porta do append é um padrão que você vai reencontrar em cadastro de usuário, carrinho de loja e agenda de contatos. E repare no que ele exige: pensar no comportamento ANTES do código, exatamente como o plano da primeira seção. Essa ordem, comportamento primeiro, código depois, é o hábito que este módulo quis plantar.
Fim do módulo 10, e é um marco de verdade: a lista é a primeira estrutura de dados da sua vida de programador, e estrutura de dados é o coração de qualquer software. O módulo 11 apresenta as irmãs dela, a tupla, o dicionário e o conjunto, cada uma com um talento próprio. E lá na frente, no projeto final, o gerenciador de tarefas vai ser, no fundo, esta lista de compras crescida: menu, lista, decisões e um arquivo para nada se perder. Você já sabe mais do que imagina.
Teste rápido
Na opção de remover, por que o programa confere if item in compras antes de chamar remove()?
Perguntas frequentes
- Digitei tudo igual e o programa não roda. Por onde começo?
- Pela mensagem de erro: ela aponta a linha. As causas campeãs neste projeto são indentação fora do lugar (os blocos do if ficam dentro do while), aspas esquecidas na comparação opcao == "1" e um print com parêntese aberto. Corrija uma coisa por vez e rode de novo.
- Por que comparar a opção como texto em vez de converter com int()?
- Porque o menu não faz conta com a opção, só compara, e comparar texto dispensa conversão. De quebra, evita um problema: int() em cima de uma digitação como abc geraria ValueError. Sem converter, qualquer digitação estranha cai educadamente no else de opção inválida.
- O que acontece se eu adicionar o mesmo item duas vezes?
- Na versão base, a lista aceita e ficam dois itens iguais; o remove tiraria só o primeiro. É um comportamento válido (duas caixas de leite existem), mas se quiser lista sem repetição, o desafio 1 resolve com not in na porta do append.
- Como faço para remover pelo NÚMERO do item em vez do nome?
- Mostre a lista numerada, leia o número com input, converta com int() e use pop(numero - 1). O menos um é essencial: o enumerate com start=1 mostra a partir do 1, mas o índice real começa no zero. Valide antes se o número está entre 1 e len(compras) para não tomar um IndexError.
- Quando fecho o programa, a lista some. Como salvar de verdade?
- Comportamento esperado: a lista vive na memória, que é apagada quando o programa encerra. A solução é gravar em arquivo, e é exatamente o assunto do módulo 15. O projeto final junta as duas pontas: esta lista com menu, mais a gravação que faz os dados sobreviverem.
- Posso mostrar este programa para alguém como projeto meu?
- Pode, principalmente se fizer os desafios e mudanças suas: renomear para lista de tarefas, acrescentar opções, mudar as mensagens. Projeto de estudo com personalização é material legítimo de portfólio iniciante, desde que apresentado com transparência sobre o contexto.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.