Loops While em Python: Um Guia Completo
Domine os loops while em Python: sintaxe, break, continue, cláusula else, loops aninhados, loops infinitos e exemplos práticos com explicações claras.
Um loop while executa um bloco de código repetidamente enquanto uma condição for True. Ao contrário de um loop for, que itera sobre uma sequência conhecida de itens, um loop while é a escolha certa quando você não sabe de antemão quantas iterações serão necessárias — por exemplo, ao ler entrada do usuário, esvaziar uma fila ou repetir uma operação até que ela tenha sucesso.
Este capítulo aborda:
- Sintaxe básica e como a condição é avaliada
break— sair do loop antecipadamentecontinue— pular para a próxima iteração- A cláusula
else— código que é executado quando o loop termina normalmente - Loops
whileaninhados - O marcador de posição
pass - Loops infinitos e como evitá-los
- Quando escolher
whilevsfor
Sintaxe básica
while condition:
# block executed while condition is TruePython avalia condition antes de cada iteração. Se for True, o bloco indentado é executado. Quando o bloco termina, a condição é verificada novamente. O loop sai assim que a condição avalia como False.
Contando de 1 a 5
Saída:
1
2
3
4
5Aqui i começa em 1. Após cada print, i aumenta em 1. Quando i chega a 6, a condição i <= 5 torna-se False e o loop para.
A variável contadora deve ser atualizada dentro do loop. Esquecer i += 1 (ou uma atualização equivalente) significa que a condição nunca se torna False e você obtém um loop infinito.
Exemplo de contagem regressiva
count = 5
while count > 0:
print(count)
count -= 1
print("Liftoff!")Saída:
5
4
3
2
1
Liftoff!O código após o bloco while é executado uma vez que o loop tenha terminado — neste caso, print("Liftoff!") não está dentro do loop.
Iterando até uma lista estar vazia
Qualquer objeto que tenha um valor booleano funciona como condição. Uma lista vazia é falsa (falsy), portanto você pode esvaziar uma lista naturalmente:
stack = [1, 2, 3]
while stack:
print(stack.pop())Saída:
3
2
1while stack é uma abreviação de while len(stack) > 0. Quando a lista está vazia, ela é falsa (falsy) e o loop termina.
A instrução break
break sai do loop imediatamente, independentemente da condição.
Saída:
0
1
2
3
4Quando num é igual a 5, break é acionado e o loop termina — 5 a 9 nunca são alcançados.
Quando usar break: pare uma busca assim que encontrar uma correspondência; interrompa um loop quando ocorrer uma condição de erro; saia de um loop de menu quando o usuário escolher "sair".
A instrução continue
continue pula o restante da iteração atual e volta diretamente para a verificação da condição.
i = 0
while i < 8:
i += 1
if i % 2 == 0:
continue
print(i)Saída:
1
3
5
7Quando i é par, continue ignora print(i) e o loop volta para avaliar a condição com o i atualizado.
Importante: incremente o contador antes da verificação do continue, não depois. Se i += 1 fosse colocado após continue, i permaneceria par indefinidamente e o loop rodaria para sempre.
A cláusula else
O loop while do Python suporta um bloco else opcional. Ele é executado somente se o loop terminou normalmente — ou seja, a condição tornou-se False — e é ignorado se o loop foi encerrado via break.
Conclusão normal
i = 1
while i <= 3:
print(i)
i += 1
else:
print("Done!")Saída:
1
2
3
Done!Loop interrompido por break
i = 1
while i <= 5:
if i == 3:
break
print(i)
i += 1
else:
print("No break")Saída:
1
2"No break" nunca é impresso porque break encerrou o loop antes que a condição pudesse se tornar False.
Uso prático: busca linear
A cláusula else é especialmente útil para padrões de busca. O bloco else é executado somente quando o alvo não foi encontrado:
numbers = [4, 7, 2, 9, 1]
target = 9
i = 0
while i < len(numbers):
if numbers[i] == target:
print("Found", target, "at index", i)
break
i += 1
else:
print(target, "not found")Saída:
Found 9 at index 3Loops while aninhados
Um loop while pode conter outro loop while dentro dele. O loop interno completa todas as suas iterações para cada iteração única do loop externo.
row = 1
while row <= 3:
col = 1
while col <= 3:
print(row * col, end=" ")
col += 1
print()
row += 1Saída:
1 2 3
2 4 6
3 6 9 Atenção: um break dentro do loop interno sai apenas do loop interno. Para sair de ambos os loops de uma vez, use uma variável de flag ou reestruture o código em uma função e use return.
A instrução pass
pass é um marcador de posição sem operação (no-op). Use-o quando um loop while é sintaticamente necessário, mas o corpo ainda não foi implementado:
i = 0
while i < 3:
pass # TODO: add logic later
i += 1Sem pass, Python geraria um IndentationError porque um bloco vazio é uma sintaxe inválida.
Loops infinitos
Um loop infinito roda para sempre porque sua condição nunca se torna False. Isso é quase sempre um bug — mas também existem usos intencionais.
Loop infinito acidental
# WARNING: this loop never ends — do not run
i = 1
while i <= 5:
print(i)
# forgot to increment iSem i += 1, i permanece 1, a condição é sempre True e o loop roda até você parar o programa manualmente (Ctrl+C).
Loop infinito intencional com break
# WARNING: intentional infinite loop — requires Ctrl+C to stop outside an app
while True:
answer = input("Type 'quit' to exit: ")
if answer == "quit":
break
print("You typed:", answer)while True é um idioma deliberado que significa "continuar até ser explicitamente interrompido." Você deve sempre ter um break (ou um return) em algum lugar dentro, caso contrário o programa ficará travado.
Consulte o capítulo de Entrada do Usuário em Python para mais padrões envolvendo loops interativos.
Loops while vs loops for
| Situação | Prefira |
|---|---|
| Você sabe o número de iterações ou tem uma sequência | for |
| Você itera até uma condição mudar | while |
| Você precisa ler entrada até o usuário sair | while True + break |
| Você quer índice e valor de uma lista | for + enumerate() |
| Você quer esvaziar ou consumir uma estrutura de dados | while |
Use for quando puder; troque por while quando a condição de término for dinâmica ou desconhecida no início do loop.