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.

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.

  1. Criar a lista vazia antes do loop: compras = [].
  2. Abrir o menu num while True, mostrando as 4 opções numeradas a cada volta.
  3. Opção 1, adicionar: input do item + append (com not in para evitar repetido, no desafio).
  4. Opção 2, ver a lista: for com enumerate(start=1); se estiver vazia, avisar em vez de mostrar nada.
  5. Opção 3, remover: input do item; se in na lista, remove; senão, avisar que não foi encontrado.
  6. Opção 4, sair: mensagem de despedida e break para encerrar o loop.
  7. 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.

  1. 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.
  2. Contador na despedida: ao sair, mostre quantos itens ficaram na lista, usando len().
  3. 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().
  4. 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).
  5. 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.