Módulo 8 - Repetições com while

Prática: seu menu interativo de 4 opções

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

O que você vai aprender

  • Montar o menu de 4 opções por etapas, começando pelo esqueleto.
  • Combinar while, if/elif/else, input, int e break num programa só.
  • Usar um while dentro de uma opção do menu (a contagem até N).
  • Testar o programa como um usuário de verdade, incluindo entradas erradas.

A missão: um programa que atende até o usuário ir embora

Especificação da missão, como você receberia num trabalho de verdade. O programa mostra um menu numerado com quatro opções. Na opção 1, pergunta o nome do usuário e o cumprimenta. Na opção 2, lê dois números e mostra a soma. Na opção 3, lê um número N e conta de 1 até N na tela. Na opção 4, se despede e encerra. Qualquer outra digitação recebe um aviso de opção inválida, e o menu reaparece após cada ação. Tudo que a missão pede você já estudou; o trabalho agora é montagem.

O conselho de quem já montou muitos: não escreva o programa inteiro de uma vez. Comece pelo esqueleto, só com o while True, a leitura da opção, o break no sair e o else da inválida. Rode e confirme que entrar e sair funciona. Depois acrescente UMA opção, rode, teste. Depois a próxima. Construir por etapas transforma um problema de 25 linhas em cinco problemas de 5 linhas, e quando algo quebra, você sabe que o defeito está na última etapa adicionada.

O código completo, linha a linha

Tente montar o programa sozinho antes de olhar a solução; a luta é onde o aprendizado acontece. Quando terminar, ou se travar por mais de 15 minutos numa etapa, compare com a versão abaixo. Ela não é a única resposta certa: se o seu código se comporta igual, está tão correto quanto.

print("=== MENU PRINCIPAL ===")
while True:
    print()
    print("1. Dizer olá")
    print("2. Somar dois números")
    print("3. Contar até N")
    print("4. Sair")
    opcao = input("Escolha uma opção: ")

    if opcao == "1":
        nome = input("Qual é o seu nome? ")
        print("Olá,", nome + "! Bom ter você por aqui.")
    elif opcao == "2":
        a = int(input("Primeiro número: "))
        b = int(input("Segundo número: "))
        print("A soma é:", a + b)
    elif opcao == "3":
        n = int(input("Contar até quanto? "))
        contador = 1
        while contador <= n:
            print(contador)
            contador = contador + 1
    elif opcao == "4":
        print("Até a próxima!")
        break
    else:
        print("Opção inválida. Digite 1, 2, 3 ou 4.")

O menu completo. Repare no while da opção 3 dentro do while principal: cada um tem a própria indentação e a própria vida.

Dois pontos merecem lupa. Primeiro, o print() vazio no topo da volta: ele imprime uma linha em branco, separando visualmente cada rodada do menu. Detalhe pequeno, experiência de uso grande. Segundo, a opção 3: ali mora um while dentro do while principal, com o bloco interno indentado com 8 espaços (4 do menu, mais 4 do loop interno). O contador nasce em 1 a cada vez que a opção é escolhida, então a contagem sempre recomeça do início. Quando o loop interno termina, o controle volta ao loop principal e o menu reaparece. Dois loops, cada um cuidando da própria condição.

Agora teste como um usuário de verdade testaria, e isso inclui maltratar o programa de propósito. Escolha cada opção pelo menos uma vez. Digite 7, digite banana, digite nada e pressione Enter: o else deve avisar em todos os casos. Na opção 3, experimente N igual a 1 e N igual a 0 (com 0, a condição já nasce falsa e nada é impresso, comportamento que a aula 2 explicou). Só depois dessa bateria escolha o 4 e confira a despedida. Programa que só foi testado no caminho feliz é programa que ainda não foi testado.

Desafios extras para ir além

Se o menu está de pé e testado, parabéns: você acabou de combinar tudo que aprendeu desde o módulo 3 num programa que se sustenta sozinho. Para transformar o feito em fluência, leve os desafios abaixo ao Playground. Eles estão em ordem de dificuldade, e cada um exige mexer numa parte diferente do código. Nenhum precisa de conteúdo que você ainda não viu.

  1. Contador de usos: crie uma variável antes do while que conte quantas ações o usuário executou e mostre o total na despedida (você fez isso na aula 4).
  2. Contagem regressiva: acrescente a opção 5, que lê N e conta de N até 1, terminando com a palavra Já! (o while que subtrai apareceu na aula 2).
  3. Soma até zero: troque a opção 2 pela versão da aula 4, que soma quantos números o usuário quiser até a sentinela 0 e mostra a média.
  4. Aceite a palavra sair: faça a opção 4 funcionar também quando o usuário digitar sair, usando or na comparação.

Um fechamento honesto sobre o que você conquistou. O menu desta prática é, em miniatura, a arquitetura do projeto final do curso: o gerenciador de tarefas do módulo 16 usa exatamente este loop principal, com opções que mexem numa lista e salvam em arquivo. A diferença entre os dois programas não é de conceito, é de recheio. E o próximo módulo apresenta o for, o irmão do while que percorre coisas prontas, começando pela tabuada automática. A mini-prova do módulo espera você logo abaixo.

Teste rápido

Na opção 3 do menu (contar até N), por que o contador = 1 fica dentro do elif, e não antes do while principal?

Perguntas frequentes

Meu menu mostra as opções uma vez e depois para de mostrar. O que houve?
Os prints das opções provavelmente ficaram FORA do while, então só executam uma vez. Mova todos para dentro do bloco do loop, indentados com 4 espaços, e o menu reaparecerá a cada volta. Esse é um dos tropeços clássicos listados na aula 5.
Digitei uma letra na opção de somar e o programa quebrou. Fiz algo errado?
Não, o programa é que ainda não está blindado: int(input(...)) quebra com ValueError quando a entrada não é número. Isso é esperado nesta altura do curso. O módulo 14 ensina try e except, e a calculadora à prova de erros de lá resolve exatamente essa fragilidade.
Posso escrever o menu com funções, uma para cada opção?
Ainda não, e por bons motivos: funções são o assunto do módulo 13. Quando chegar lá, reescrever este menu com uma função por opção é um exercício excelente, e o projeto final usa exatamente essa organização. Por ora, o if/elif direto cumpre a missão.
Na opção 3, digitei 0 e nada aconteceu. É bug?
É o comportamento correto. Com n valendo 0, a condição contador <= n já nasce falsa (1 não é menor nem igual a 0), e o while interno não dá nenhuma volta, como a aula 2 mostrou. Se quiser avisar o usuário nesse caso, um if n < 1 com uma mensagem resolve.
Como limpo a tela entre uma volta e outra do menu?
Em terminal, o costume é chamar o comando de limpeza do sistema, o que envolve o módulo os e diferenças entre Windows e Linux, assunto para mais adiante na trilha. O print() vazio da nossa versão é a solução simples que funciona em qualquer lugar, inclusive no Playground.
Terminei a prática e os desafios. O que estudar agora?
Faça a mini-prova do módulo para consolidar (e destravar a medalha) e siga para o módulo 9, sobre o for. Ele resolve com uma linha alguns padrões que aqui pediram três, e a comparação entre os dois loops vai amarrar tudo que você aprendeu neste módulo.

Fontes

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