Laço for versus laço while em Python: quando usar cada um
Os dois laços repetem código, então quem está começando costuma se perguntar qual escolher. A regra prática: use um laço for quando você sabe o que vai percorrer, e um laço while quando está esperando algo mudar. Cada exemplo abaixo foi executado, e a saída mostrada é exata.
for com range: um número conhecido de vezes
range(3) gera 0, 1 e 2. A variável do laço assume cada valor por vez. O fim do range nunca é incluído.
for i in range(3):
print(i)Saída:
0 1 2
for sobre uma lista: cada item
Um laço for pode percorrer diretamente uma lista, uma string, um dicionário ou qualquer coisa que você consiga percorrer item por item. Você não precisa de um índice.
for part in ["wrench", "cable"]:
print(part)Saída:
wrench cable
while: até que algo mude
Um laço while verifica a condição antes de cada volta. Algo dentro do laço precisa mudar essa condição, ou ele nunca para. Aqui a bateria cai 3 por vez até não sobrar o suficiente, e você não sabe de antemão o número de voltas.
battery = 10
steps = 0
while battery >= 3:
battery -= 3
steps += 1
print(steps)Saída:
3
break e continue
break sai do laço imediatamente. continue pula o resto desta volta e passa para a próxima. Os dois funcionam tanto em laços for quanto em laços while.
for n in range(1, 8):
if n % 2 == 0:
continue
if n > 5:
break
print(n)Saída:
1 3 5
O laço infinito
Um laço while cuja condição nunca se torna falsa roda para sempre. Se o seu programa parecer travado, confira se a variável da condição realmente muda dentro do laço. Neste site, um programa que roda por mais de cinco segundos é interrompido para você.
Perguntas comuns
- Todo laço for pode ser escrito como um laço while?
- Sim, mas fica mais longo e mais fácil de errar, porque você mesmo controla o contador. Prefira for sempre que estiver percorrendo uma coleção ou um intervalo fixo.
- Qual é a diferença entre break e continue?
- break encerra o laço inteiro. continue apenas pula a volta atual e segue para a próxima.
- Por que o meu laço while nunca termina?
- A condição continua verdadeira porque nada dentro do laço muda a variável que ela testa. Adicione uma linha que a aproxime do fim, como n -= 1.