Pular para o conteúdo
Praticar: 5 fichas
1ª unidadeLição 5 de 7~12 min de leitura5 fichas para praticar

while ou for?

Os dois repetem código. A diferença é quem controla a repetição: no for, o Python cuida de tudo; no while, você cuida.

Nesta lição0 de 6 vistas
  1. 1A regra para escolher
  2. 2Um vira o outro
  3. 3Laboratório de range
  4. 4Quando o for não serve
  5. 5Família por família
  6. 6Parar sem break
1

A regra para escolher

Você sabe quantas voltas antes de começar?

Use for quando

você sabe antes de começar quantas voltas vão ser: de 1 a N, N notas, os números de quatro algarismos, a tabuada.

Use while quando

a quantidade de voltas depende do que acontece durante o laço: até digitar zero, até o sapo sair, enquanto sobrar algarismo.

Na prova: o professor prefere while e não aceita break. Então aprenda os dois, mas escreva while na prova. O for aparece aqui para você entender a diferença e reconhecer quando alguém usar.

2

Um vira o outro

As três responsabilidades do while viram os três números do range

Somar de 1 até n

exemplo.py
n = 5
soma = 0
for i in range(1, n + 1):
soma = soma + i
print(soma)
é o mesmo que, com while:
exemplo.py
n = 5
soma = 0
i = 1
while i <= n:
soma = soma + i
i = i + 1
print(soma)
  1. 1i = 1 é onde começa: o primeiro número do range.
  2. 2i <= n é até onde vai: o segundo número do range. Como o range para um antes do fim, i <= n vira range(…, n + 1).
  3. 3i = i + 1 é de quanto em quanto anda: o terceiro número. Quando é 1, pode ser omitido.
3

Laboratório de range

Mude os números e veja o que o range gera
range(1, 10, 2) gera 5 valores
13579
for
for i in range(1, 10, 2):
print(i)
o mesmo com while
i = 1
while i < 10:
print(i)
i = i + 2

Repare: o fim (10) nunca aparece na lista. É por isso que “de 1 até N” vira range(1, N + 1).

4

Quando o for não serve

A quantidade de voltas é desconhecida
SituaçãoPor que só o while
Percorrer dígitosVocê não sabe quantos algarismos o número tem. Para usar for teria que converter em texto (len(str(n))), o que o professor não aceita.
Senha de parada“Leia até digitar zero”: ninguém sabe quantos números virão. Só o while, com leitura antes do laço e no fim dele.
Simular até acontecerSapo no poço, Collatz, Chico e Juca: a quantidade de voltas é justamente a resposta. Não dá para saber antes.
Parar ao encontrarCom for, parar no meio exige break. Sem break, o jeito é while com a condição composta: while i <= n and not achou.
5

Família por família

Qual laço é mais natural em cada família de fichas
FamíliaMais naturalNa provaPor quê
Percorrer dígitoswhilewhileVocê não sabe quantos algarismos o número tem, então repete enquanto sobrar número.
Percorrer divisoresforwhileVocê sabe de antemão o intervalo a testar (de 1 até n), então a quantidade de voltas é conhecida.
Acumular com contadorforwhileA quantidade de voltas é dada pelo próprio enunciado (N vezes).
Varrer um intervaloforwhileComeço e fim são conhecidos: é exatamente o que o range descreve.
Decidir por condiçõessem laçosem laçoNão há repetição: o programa decide uma vez e termina.
Repetir até uma condiçãowhilewhileA quantidade de voltas depende do que acontece durante o laço: só o while serve.
Laço dentro de laçocada laço o seuwhileCada laço segue a regra da sua própria família: um pode ser for e o outro while.
ListaswhilewhilePara percorrer pela posição, o índice vai de 0 até len(lista) − 1. O for x in lista também serve quando você só precisa dos valores, não das posições.
TuplasforwhileA tupla tem tamanho fixo e conhecido: o for passa por todos os valores. O while com índice também funciona, igual na lista.
Funçõescada laço o seuwhileA função em si não é laço: dentro dela vale a regra de sempre, while quando não se sabe quantas voltas, for quando se sabe.
DicionáriosforwhileO dicionário não tem posições 0, 1, 2: o for passa direto pelas chaves (ou pelos pares, com .items()). Para usar while, primeiro faça uma lista das chaves: chaves = list(d.keys()), e ande nela pelo índice.
6

Parar sem break

O motivo da parada pertence à condição do while
exemplo.py
n = 91
achou = False
i = 2
while i < n and not achou:
if n % i == 0:
achou = True
i = i + 1
print(achou, i - 1)

Para ao encontrar o primeiro divisor (o 7): a condição do while olha o achou a cada volta.

Quem usa break está escondendo dentro do laço uma informação que deveria estar no topo dele. E nunca comece com while True: esse laço só sai com break.

Erros que mais aparecem na prova

5 erros
range(1, n) para “de 1 até n”

O fim do range nunca entra. Para incluir o n, o fim é n + 1.

Esquecer de andar a variável no while

Sem i = i + 1, a condição nunca muda e o laço não termina.

while True com break

O professor não aceita. A condição de parada vai no próprio while.

Mudar a variável do for dentro do laço

No for, o Python escolhe o próximo valor sozinho: mudar i lá dentro não pula voltas.

for para percorrer dígitos

Exige converter o número em texto, o que anula a questão. Dígitos são com while n > 0.

Próxima lição: Laço dentro de laço ›

Complemento, não atalho. O laboratório ajuda a entender a lógica. Para fixar de verdade, escreva do zero no Thonny ou no seu editor.