Loops são estruturas que permitem executar um bloco de código repetidamente. Eles são essenciais para automatizar tarefas, processar coleções de dados e criar programas interativos. Neste guia completo, você vai dominar os loops for e while em Python.

🎯 O Que São Loops e Por Que Usá-los?

Imagine que você precisa exibir os números de 1 a 100. Sem loops, você precisaria escrever 100 linhas de código. Com loops, você resolve em 2 linhas:

for i in range(1, 101):
    print(i)

Loops são usados para:

  • Processar itens de uma lista, dicionário ou arquivo
  • Repetir ações até uma condição ser atendida
  • Criar menus interativos
  • Automatizar tarefas repetitivas
  • Implementar algoritmos de busca e ordenação

🔄 O Loop for

O for é usado quando você sabe quantas vezes quer repetir ou quando está iterando sobre uma coleção:

Iterando sobre Listas

frutas = ["maçã", "banana", "laranja"]

for fruta in frutas:
    print(f"Eu gosto de {fruta}")

# Saída:
# Eu gosto de maçã
# Eu gosto de banana
# Eu gosto de laranja

Usando range()

A função range() gera uma sequência de números:

# range(fim) - de 0 até fim-1
for i in range(5):
    print(i)  # 0, 1, 2, 3, 4

# range(início, fim) - de início até fim-1
for i in range(1, 6):
    print(i)  # 1, 2, 3, 4, 5

# range(início, fim, passo)
for i in range(0, 10, 2):
    print(i)  # 0, 2, 4, 6, 8

# Contagem regressiva
for i in range(10, 0, -1):
    print(i)  # 10, 9, 8, ..., 1

Iterando sobre Strings

palavra = "Python"

for letra in palavra:
    print(letra)
# P, y, t, h, o, n

Usando enumerate()

Quando você precisa do índice junto com o valor:

cores = ["vermelho", "azul", "verde"]

for indice, cor in enumerate(cores):
    print(f"{indice}: {cor}")

# 0: vermelho
# 1: azul
# 2: verde

# Começando de 1
for i, cor in enumerate(cores, start=1):
    print(f"{i}. {cor}")

Iterando sobre Dicionários

pessoa = {"nome": "Ana", "idade": 25, "cidade": "SP"}

# Iterar pelas chaves
for chave in pessoa:
    print(chave)

# Iterar pelos valores
for valor in pessoa.values():
    print(valor)

# Iterar por chave e valor
for chave, valor in pessoa.items():
    print(f"{chave}: {valor}")

🔁 O Loop while

O while repete enquanto uma condição for verdadeira:

contador = 0

while contador < 5:
    print(f"Contador: {contador}")
    contador += 1

# Contador: 0
# Contador: 1
# Contador: 2
# Contador: 3
# Contador: 4

Loop Infinito Controlado

while True:
    comando = input("Digite um comando (sair para encerrar): ")
    
    if comando == "sair":
        print("Encerrando...")
        break
    
    print(f"Você digitou: {comando}")

Validação de Entrada

idade = -1

while idade < 0 or idade > 150:
    idade = int(input("Digite sua idade (0-150): "))
    
    if idade < 0 or idade > 150:
        print("Idade inválida! Tente novamente.")

print(f"Sua idade é {idade} anos")

⚡ Controle de Fluxo: break, continue e else

break: Interrompe o Loop

for i in range(10):
    if i == 5:
        print("Encontrei o 5, parando!")
        break
    print(i)

# 0, 1, 2, 3, 4, Encontrei o 5, parando!

continue: Pula para Próxima Iteração

for i in range(10):
    if i % 2 == 0:
        continue  # Pula números pares
    print(i)

# 1, 3, 5, 7, 9

else em Loops

O else executa quando o loop termina normalmente (sem break):

numeros = [1, 3, 5, 7, 9]

for num in numeros:
    if num % 2 == 0:
        print(f"Encontrado par: {num}")
        break
else:
    print("Nenhum número par encontrado")

# Saída: Nenhum número par encontrado

🔀 Loops Aninhados

Um loop dentro de outro:

# Tabuada
for i in range(1, 4):
    print(f"Tabuada do {i}:")
    for j in range(1, 11):
        print(f"  {i} x {j} = {i * j}")
    print()

Matriz

matriz = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

for linha in matriz:
    for elemento in linha:
        print(elemento, end=" ")
    print()

# 1 2 3
# 4 5 6
# 7 8 9

📚 Funções Úteis para Iteração

zip(): Iterar Múltiplas Listas

nomes = ["Ana", "Bruno", "Carla"]
idades = [25, 30, 28]

for nome, idade in zip(nomes, idades):
    print(f"{nome} tem {idade} anos")

# Ana tem 25 anos
# Bruno tem 30 anos
# Carla tem 28 anos

reversed(): Iterar ao Contrário

numeros = [1, 2, 3, 4, 5]

for num in reversed(numeros):
    print(num)  # 5, 4, 3, 2, 1

sorted(): Iterar em Ordem

numeros = [3, 1, 4, 1, 5, 9, 2]

for num in sorted(numeros):
    print(num)  # 1, 1, 2, 3, 4, 5, 9

# Ordem decrescente
for num in sorted(numeros, reverse=True):
    print(num)  # 9, 5, 4, 3, 2, 1, 1

🎮 Projetos Práticos

1. Jogo de Adivinhação

import random

numero_secreto = random.randint(1, 100)
tentativas = 0
max_tentativas = 7

print("Adivinhe o número entre 1 e 100!")

while tentativas < max_tentativas:
    palpite = int(input("Seu palpite: "))
    tentativas += 1
    
    if palpite == numero_secreto:
        print(f"Parabéns! Acertou em {tentativas} tentativas!")
        break
    elif palpite < numero_secreto:
        print("Maior!")
    else:
        print("Menor!")
else:
    print(f"Suas tentativas acabaram! Era {numero_secreto}")

2. Verificador de Números Primos

def eh_primo(n):
    if n < 2:
        return False
    
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False
    return True

# Encontrar primos até 50
print("Números primos até 50:")
for num in range(2, 51):
    if eh_primo(num):
        print(num, end=" ")

# 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47

3. Menu Interativo

def menu():
    print("\n=== MENU ===")
    print("1. Opção A")
    print("2. Opção B")
    print("3. Opção C")
    print("0. Sair")
    return input("Escolha: ")

while True:
    opcao = menu()
    
    if opcao == "1":
        print("Você escolheu A")
    elif opcao == "2":
        print("Você escolheu B")
    elif opcao == "3":
        print("Você escolheu C")
    elif opcao == "0":
        print("Até logo!")
        break
    else:
        print("Opção inválida")

💡 Boas Práticas

1. Prefira for Quando Possível

# Evite (while para iteração simples)
i = 0
while i < len(lista):
    print(lista[i])
    i += 1

# Prefira
for item in lista:
    print(item)

2. Use Nomes Descritivos

# Ruim
for x in y:
    print(x)

# Bom
for usuario in lista_usuarios:
    print(usuario)

3. Evite Modificar Lista Durante Iteração

# Problema
numeros = [1, 2, 3, 4, 5]
for num in numeros:
    if num % 2 == 0:
        numeros.remove(num)  # Pode pular elementos!

# Solução: usar list comprehension
numeros = [1, 2, 3, 4, 5]
numeros = [num for num in numeros if num % 2 != 0]

❌ Erros Comuns

1. Loop Infinito Acidental

# Erro: esqueceu de incrementar
i = 0
while i < 5:
    print(i)
    # i += 1  # Faltou isso!

# Correto
i = 0
while i < 5:
    print(i)
    i += 1

2. Modificar range()

# range() gera valores sob demanda, não uma lista
r = range(5)
r[0] = 10  # Erro! Não pode modificar

🚀 Próximos Passos

Agora que você domina loops, está pronto para aprender sobre listas e dicionários, que são frequentemente usados com loops. Também recomendo estudar funções para organizar seu código em blocos reutilizáveis.

Se você ainda está começando, revise o conteúdo sobre estruturas condicionais, pois loops e condicionais frequentemente trabalham juntos.

Para um aprendizado completo e estruturado, confira nosso curso de Python do zero ao avançado.

A prática leva à perfeição! Experimente criar seus próprios loops e projetos.