Menu

Laços while em Python: sintaxe, while True e como evitar loops infinitos

Quando escolher um laço while em vez de for, como evitar loops infinitos e os padrões que aparecem mais em código real.

Um laço que vigia uma condição

Onde o for itera sobre uma sequência conhecida, o while continua repetindo enquanto uma condição for verdadeira. Você recorre a ele quando não sabe de antemão quantas iterações vai precisar — tentar de novo até funcionar, ler entrada até o usuário mandar parar, consultar um serviço até ele responder.

O formato é simples:

main.py
Output
Click Run to see the output here.

Isso imprime de 0 a 4. O Python checa a condição no topo de cada iteração. Se é verdadeira, o corpo roda. Depois checa de novo. Quando a condição fica falsa, o laço termina.

Repare que count += 1 importa. Sem isso, a condição ficaria verdadeira para sempre — um loop infinito. Essa é a principal armadilha do while, e a principal razão para preferir for quando puder.

Quando while é a ferramenta certa

Alguns casos de uso clássicos:

Tentar até dar certo.

main.py
Output
Click Run to see the output here.

Ler entrada até o usuário sair.

main.py
Output
Click Run to see the output here.

Processar uma fila.

main.py
Output
Click Run to see the output here.

O fio comum: você está vigiando uma mudança de estado em vez de iterar sobre itens.

while True é ok

Você vai ver esse padrão com frequência:

main.py
Output
Click Run to see the output here.

Isso é Python idiomático quando a condição de saída "real" está dentro do corpo do laço, não algo limpo que dá para testar no topo. É mais fácil de ler do que inventar uma flag should_continue que você atualiza num lugar e checa em outro.

A única regra: garanta que existe um break (ou return, ou uma exceção lançada) que o código eventualmente alcance. Um while True: incondicional sem saída é o jeito clássico de travar um programa.

Evitando o loop infinito

Loops infinitos acontecem quando a condição fica verdadeira para sempre. Os suspeitos de sempre:

  • Esqueceu de atualizar a variável. while count < 5: precisa de algo dentro do corpo que muda count.
  • Atualizou a variável errada. while i < 10: e depois j += 1 por dentro — fácil de não perceber se seu código tem mais de algumas variáveis.
  • Comparação de ponto flutuante. while x != 1.0: pode rodar para sempre se x só chega perto de 1.0. Use <= ou abs(x - 1.0) < tolerancia.

Se acabar travado num loop infinito num terminal, aperte Ctrl+C. Isso manda um sinal de interrupção e o Python para o que estiver fazendo.

break, continue e else

while suporta as mesmas três ferramentas de "fluxo" que o for:

  • break sai do laço imediatamente.
  • continue pula para a próxima iteração (então a condição é checada de novo).
  • else roda se o laço terminar sem um break.
main.py
Output
Click Run to see the output here.

Isso é um teste primitivo de primalidade. Se o break interno dispara, o número é composto. Se o laço sai naturalmente (condição fica falsa), o else roda e declara o número primo.

while vs for: qual escolher?

Um teste mental rápido:

  • Você tem uma coleção para percorrer?for.
  • Precisa iterar um número fixo de vezes?for i in range(n):.
  • Está em laço até alguma condição mudar?while.

Em Python de início, você vai achar que for cobre 90% dos laços. while aparece quando você está fazendo algo como polling, retry ou construindo um REPL simples. Se você está usando while para iterar sobre uma lista com índice, isso é sinal de que deveria mudar para for + enumerate.

Um programa prático com while

Um jogo de adivinhar número é um exemplo clássico porque o número de iterações depende de como o usuário joga:

main.py
Output
Click Run to see the output here.

Você não pode saber de antemão quantas tentativas vai levar — depende dos palpites do usuário. É exatamente para isso que o while existe.

Olhando adiante

Você já viu os dois tipos de laços que o Python te dá. Na próxima: range() em detalhe — aparece em quase todo laço for de contagem, e as pequenas nuances valem entender antes de irmos para coleções.

Perguntas frequentes

Quando devo usar um laço while em vez de for?

Use while quando você não sabe de antemão quantas iterações vai precisar — por exemplo, tentar de novo até algo dar certo, ou ler entrada até o usuário digitar 'sair'. Use for quando está passando por uma coleção conhecida.

Como evito um loop infinito em Python?

Garanta que algo dentro do laço eventualmente torne a condição falsa. A causa mais comum de loops infinitos é esquecer de atualizar a variável da qual a condição depende. Se ficar preso num, aperte Ctrl+C no terminal para parar.

while True é má prática?

Não inerentemente. while True: com um break claro por dentro é um padrão perfeitamente normal para "loop até a gente bater numa condição de saída específica". É mais limpo do que inventar uma flag booleana que você tem que gerenciar em dois lugares.

Aprenda a programar com o Coddy

COMEÇAR