Módulo 8 - Repetições com while

Menus com while: o padrão que aparece em todo programa de terminal

10 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026

O que você vai aprender

  • Montar o esqueleto do menu: while True, if/elif das opções e break no sair.
  • Entender por que o menu compara a opção como texto, sem converter para número.
  • Tratar a opção inválida com else, avisando sem encerrar o programa.
  • Reconhecer o padrão menu em programas reais de terminal.

O esqueleto do padrão menu

Pense nos programas de terminal que você já viu, do caixa eletrônico ao instalador de um jogo. Quase todos conversam do mesmo jeito: mostram uma lista numerada de opções, esperam a escolha, executam a tarefa e voltam a mostrar a lista. Esse comportamento tem um esqueleto único, e você já conhece cada osso dele: o while True da aula 3 mantém o programa de pé, o if/elif/else do módulo 7 decide o que fazer e o break encerra tudo quando o usuário escolhe sair.

while True:
    print("1. Ver saudação")
    print("2. Sair")
    opcao = input("Escolha uma opção: ")

    if opcao == "1":
        print("Olá! Que bom ter você por aqui.")
    elif opcao == "2":
        print("Até logo!")
        break
    else:
        print("Opção inválida. Digite 1 ou 2.")

O menor menu possível, com o esqueleto completo: while True, if/elif das opções, break no sair e else para o resto.

Siga o fluxo de uma volta: o programa imprime as opções, o input congela tudo esperando a digitação e o valor digitado cai na escada de comparações. Digitou 1, executa a saudação e o while recomeça, mostrando o menu de novo. Digitou 2, imprime a despedida e o break mata o loop. Digitou qualquer outra coisa, o else avisa e o menu volta. O programa só termina quando o usuário quiser, e é exatamente essa a experiência que um menu deve dar.

Os detalhes que separam o menu bom do quebrado

Primeiro detalhe: a comparação usa texto, opcao == "1" com aspas, e não o número 1. Motivo: o input sempre devolve texto, como você aprendeu no módulo 5. Poderíamos converter com int, mas aí um usuário que digitasse banana derrubaria o programa com ValueError antes mesmo de o menu decidir algo. Comparando como texto, qualquer digitação estranha escorrega em paz até o else, que avisa e segue o jogo. Menos conversão, mais robustez.

Segundo detalhe: o else final não é enfeite, é rede de proteção. Sem ele, uma opção inexistente simplesmente não faz nada, e o usuário fica olhando para a tela sem saber se o programa travou ou se ele errou. Um aviso claro, Opção inválida, digite 1 ou 2, transforma a confusão em correção imediata. Programas educados avisam o que aceitam.

Terceiro detalhe, mais sutil: a posição do break importa. Ele mora dentro do elif do sair, depois da mensagem de despedida. Se ficasse antes do print, a despedida nunca apareceria, porque o break interrompe o loop na hora, sem terminar a volta. Ordem das linhas é lógica, não estética.

Por que esse padrão está em todo lugar

O menu com while True resolve um problema universal: programas úteis precisam ficar disponíveis, não executar uma tarefa e morrer. O usuário quer consultar o saldo, depois fazer um depósito, depois consultar de novo, tudo na mesma sessão. Sem o loop, ele teria que abrir o programa três vezes. Com o loop, o programa vira um balcão de atendimento: sempre aberto até o cliente ir embora.

E o padrão escala. O gerenciador de tarefas do projeto final, no módulo 16, é este mesmo esqueleto com cinco opções em vez de duas, e cada opção chamando um pedaço maior de código. Aplicativos gráficos e sites usam a mesma ideia com outro nome, o loop de eventos: enquanto o programa estiver aberto, espere a próxima ação do usuário e reaja. Quem entende o menu de terminal já entendeu o coração de qualquer programa interativo.

  1. Mostre as opções ao usuário (os prints do menu).
  2. Leia a escolha (o input).
  3. Execute a opção escolhida (a escada de if/elif).
  4. Trate a escolha inválida (o else).
  5. Repita tudo até a opção sair disparar o break.

Guarde essa receita de cinco passos: ela é o roteiro da prática da próxima aula, em que você monta um menu de verdade, com quatro opções e código completo. Antes, o checkpoint confere se o esqueleto ficou de pé.

Teste rápido

Num menu com while True, o que acontece se o programador esquecer o break na opção sair?

Perguntas frequentes

Por que comparar a opção como texto em vez de converter com int?
Porque o input devolve texto, e comparar texto com texto dispensa conversão. Se o programa fizesse int(opcao) e o usuário digitasse uma letra, o ValueError derrubaria tudo. Comparando como texto, a entrada estranha cai no else, que avisa e mantém o programa vivo.
Posso ter mais de um break no mesmo menu?
Pode. Se duas opções encerram o programa, por exemplo sair e encerrar sessão, cada uma tem o próprio break. O que não muda é a regra: cada break encerra apenas o loop em que está, no momento em que executa.
Como faço o menu aceitar 1 e também a palavra sair?
Com o operador or do módulo 6 na comparação: if opcao == "2" or opcao == "sair". Muitos programas reais aceitam as duas formas. Só mantenha o texto do menu honesto, mostrando ao usuário o que ele pode digitar.
E se o usuário digitar a opção com espaço, tipo 1 seguido de espaço?
A comparação falha, porque o texto 1 com espaço é diferente de 1, e a entrada cai no else. O módulo 12, de textos, apresenta o strip, que remove espaços das pontas e resolve isso com elegância. Por enquanto, o else segura a situação avisando o usuário.
O menu precisa reimprimir as opções a cada volta?
É a prática comum em terminal, porque a conversa anterior empurra o menu para cima e o usuário perde a referência. Como os prints estão dentro do while, a reimpressão sai de graça. Programas maiores às vezes limpam a tela antes, refinamento que fica para depois.
Esse padrão serve para jogos também?
Serve, e muito. Um jogo de adivinhação é um while que repete até o acerto; um jogo de perguntas é um menu em que cada volta traz uma questão. O loop principal de jogos gráficos, chamado game loop, é a mesma ideia rodando dezenas de vezes por segundo.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.