Muita gente trava na hora de escolher entre for e while. Ambos repetem código, mas a diferença não é técnica — é conceitual. A pergunta que resolve tudo é: você sabe quantas voltas o laço vai dar antes de começar a executar?
Se sim, use for. Se não, use while. Simples assim.
Vou te mostrar com exemplos que você pode rodar agora mesmo.
Quando Usar for: Você Sabe o Número de Repetições
O for é ideal quando você conhece o "tamanho" da repetição. Isso pode ser o número de elementos de uma lista, um intervalo numérico, ou um conjunto pré-definido.
Exemplo 1: Percorrer uma lista de nomes
nomes = ["Ana", "Carlos", "Beatriz", "Daniel"]
for nome in nomes:
print(f"Processando: {nome}")
Aqui, o Python sabe que são 4 nomes. O laço executa exatamente 4 vezes. Não há surpresa.
Exemplo 2: Contagem regressiva com range()
for segundos in range(10, 0, -1):
print(segundos)
print("Fogo!")
Nesse caso, o range(10, 0, -1) gera uma sequência de 10 a 1. Você sabe que serão 10 iterações. O código é enxuto e claro.
Exemplo 3: Processar elementos com índice
letras = ['a', 'b', 'c', 'd', 'e']
for i in range(len(letras)):
print(f"Índice {i}: {letras[i]}")
Apesar de usarmos len(letras), o número de repetições é conhecido: 5. O for é a escolha certa.
Quando Usar while: O Número de Repetições é Desconhecido
O while é seu aliado quando o código precisa repetir até que uma condição mude. Você não sabe quantas voltas serão necessárias.
Exemplo 1: Validar entrada do usuário
senha = "1234"
tentativa = ""
while tentativa != senha:
tentativa = input("Digite a senha: ")
print("Acesso liberado")
O usuário pode acertar na primeira tentativa ou na décima. O for não serve aqui porque o número de repetições depende do usuário.
Exemplo 2: Jogar um dado até sair 6
import random
resultado = 0
tentativas = 0
while resultado != 6:
resultado = random.randint(1, 6)
tentativas += 1
print(f"Tentativa {tentativas}: {resultado}")
print(f"Conseguiu em {tentativas} tentativas!")
Teoricamente, o loop pode rodar para sempre (embora na prática seja raro). Usar for aqui seria impossível — você não tem como saber o número de jogadas.
Exemplo 3: Ler arquivo até o fim
with open("dados.txt", "r") as arquivo:
linha = arquivo.readline()
while linha:
print(linha.strip())
linha = arquivo.readline()
O arquivo pode ter 5 ou 5000 linhas. O while lê até encontrar uma linha vazia (fim do arquivo). O for seria uma alternativa, mas com while o controle sobre a condição de parada fica mais explícito.
E Quando Ambos Servem? Use o Mais Simples
Às vezes, o problema pode ser resolvido com qualquer um. Nesse caso, a regra de ouro é: prefira for.
Exemplo que funciona com ambos:
# Versão for (recomendada)
numeros = [1, 2, 3, 4, 5]
soma = 0
for n in numeros:
soma += n
print(soma)
# Versão while (funciona, mas é pior)
numeros = [1, 2, 3, 4, 5]
soma = 0
i = 0
while i < len(numeros):
soma += numeros[i]
i += 1
print(soma)
Repare que o while exige que você gerencie manualmente o índice i. É mais código, mais chance de erro (esquecer o i += 1 causa loop infinito). O for é mais seguro e legível.
Cuidado: O Perigo do Loop Infinito
Todo iniciante (e até veteranos) já sofreu com isso. O while é traiçoeiro porque depende da condição ser alterada dentro do bloco.
Exemplo problemático:
# NUNCA FAÇA ISSO - loop infinito
contador = 0
while contador < 5:
print("Ficar preso aqui para sempre")
# Esqueci de incrementar contador!
Se você não alterar a condição internamente, o código rodará até travar o computador. Dica: sempre teste a condição mentalmente antes de executar. Em Python, use Ctrl+C no terminal para interromper um loop infinito.
Conclusão e Próximo Passo
A regra é clara: sabe quantas repetições? for. Não sabe? while. Essa simples pergunta resolve 95% dos casos.
Agora, abra seu editor e pratique. Crie um programa que peça números ao usuário até ele digitar 0 (use while para a condição de parada) e depois calcule a média com for. Isso vai fixar o conceito de uma vez por todas.
Se quiser aprender mais e ter todo o conteúdo de programação em um só lugar, com roteiro passo a passo, dá uma olhada no MeuPasso. Lá organizei os tópicos na ordem certa para você não pular etapas.