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.
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: Menus com while: o padrão que aparece em todo programa de terminal.
Os objetivos desta aula. 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.
Veja o essencial, parte por parte.
O esqueleto do padrão menu. O padrão menu tem três peças: while True para repetir, if/elif para cada opção e break no sair.
Os detalhes que separam o menu bom do quebrado. Esquecer o break no sair: o programa se despede e o menu aparece de novo, preso para sempre.
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.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
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.
- Mostre as opções ao usuário (os prints do menu).
- Leia a escolha (o input).
- Execute a opção escolhida (a escada de if/elif).
- Trate a escolha inválida (o else).
- 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.