Fluxo de Controle: Loops
Domine loops Python: loops while, loops for, range(), break, continue, loops aninhados e padrões de iteração.
Fluxo de Controle: Loops
Loops permitem que você execute um bloco de código múltiplas vezes. Eles são essenciais para processar coleções, repetir tarefas e implementar algoritmos.
O que São Loops?
Um loop repete um bloco de código até que uma condição seja satisfeita. Python fornece dois tipos principais de loops: while e for.
O Loop while
O loop while repete enquanto uma condição permanecer True.
Sintaxe Básica
while condicao:
# Código executa repetidamente enquanto condicao for True
passExemplo Simples de while
# Contagem regressiva de 5
contador = 5
while contador > 0:
print(f"Contagem: {contador}")
contador -= 1 # IMPORTANTE: Atualize o contador!
print("Decolagem! 🚀")Saída:
Contagem: 5
Contagem: 4
Contagem: 3
Contagem: 2
Contagem: 1
Decolagem! 🚀
Sempre garanta que a condição do loop eventualmente se torne False! Esquecer de atualizar a variável do loop cria um loop infinito:
# LOOP INFINITO - não faça isso!
contador = 5
while contador > 0:
print(contador)
# Esqueceu: contador -= 1Loop while com Entrada do Usuário
# jogo_adivinhacao.py
import random
def adivinhar_numero():
"""Jogo simples de adivinhação usando loop while."""
secreto = random.randint(1, 20)
tentativas = 0
max_tentativas = 5
print("=== Jogo de Adivinhação ===")
print("Estou pensando em um número entre 1 e 20.")
print(f"Você tem {max_tentativas} tentativas.\n")
while tentativas < max_tentativas:
palpite = int(input(f"Tentativa {tentativas + 1}/{max_tentativas}: "))
tentativas += 1
if palpite == secreto:
print(f"🎉 Correto! Você acertou em {tentativas} tentativas!")
return
elif palpite < secreto:
print("Muito baixo! Tente um número maior.")
else:
print("Muito alto! Tente um número menor.")
print(f"\n😔 Fim de jogo! O número era {secreto}.")
# Executa o jogo
adivinhar_numero()Saída de exemplo:
=== Jogo de Adivinhação ===
Estou pensando em um número entre 1 e 20.
Você tem 5 tentativas.
Tentativa 1/5: 10
Muito alto! Tente um número menor.
Tentativa 2/5: 5
Muito baixo! Tente um número maior.
Tentativa 3/5: 7
🎉 Correto! Você acertou em 3 tentativas!
O Loop for
O loop for itera sobre uma sequência (lista, string, range, etc.).
Sintaxe Básica
for item in sequencia:
# Código executa uma vez para cada item na sequência
passIterando Sobre Diferentes Sequências
# Iterando sobre uma lista
frutas = ["maca", "banana", "cereja"]
print("Frutas:")
for fruta in frutas:
print(f" - {fruta}")
# Iterando sobre uma string
print("\nLetras em 'Python':")
for letra in "Python":
print(f" {letra}")
# Iterando sobre uma tupla
coordenadas = (10, 20, 30)
print("\nCoordenadas:")
for coord in coordenadas:
print(f" {coord}")Saída:
Frutas:
- maca
- banana
- cereja
Letras em 'Python':
P
y
t
h
o
n
Coordenadas:
10
20
30
A Função range()
range() gera uma sequência de números, comumente usada com loops for.
Variantes de range()
Exemplos de range()
# range(fim) - começa em 0, para antes de fim
print("range(5):")
for i in range(5):
print(i, end=" ")
# Saída: 0 1 2 3 4
print("\n\nrange(2, 6):")
for i in range(2, 6):
print(i, end=" ")
# Saída: 2 3 4 5
print("\n\nrange(0, 10, 2):")
for i in range(0, 10, 2):
print(i, end=" ")
# Saída: 0 2 4 6 8
print("\n\nrange(5, 0, -1):")
for i in range(5, 0, -1):
print(i, end=" ")
# Saída: 5 4 3 2 1Usos Práticos de range()
# Soma dos primeiros n números
def soma_primeiros_n(n):
total = 0
for i in range(1, n + 1):
total += i
return total
print(f"Soma de 1 a 100: {soma_primeiros_n(100)}") # 5050
# Tabuada
def imprimir_tabuada(numero, ate=10):
print(f"\nTabuada do {numero}:")
for i in range(1, ate + 1):
print(f" {numero} × {i:2d} = {numero * i:3d}")
imprimir_tabuada(7)Saída:
Soma de 1 a 100: 5050
Tabuada do 7:
7 × 1 = 7
7 × 2 = 14
7 × 3 = 21
7 × 4 = 28
7 × 5 = 35
7 × 6 = 42
7 × 7 = 49
7 × 8 = 56
7 × 9 = 63
7 × 10 = 70
Controle de Loop: break e continue
Instruções de controle modificam o comportamento do loop.
break - Sai do Loop Imediatamente
# Exemplo de break: encontrar primeiro número par
numeros = [1, 3, 5, 8, 9, 10, 11]
for num in numeros:
if num % 2 == 0:
print(f"Primeiro número par encontrado: {num}")
break
print(f" Verificando {num}... (ímpar)")Saída:
Verificando 1... (ímpar)
Verificando 3... (ímpar)
Verificando 5... (ímpar)
Primeiro número par encontrado: 8
continue - Pula para a Próxima Iteração
# Exemplo de continue: pular números ímpares
for num in range(1, 11):
if num % 2 != 0:
continue # Pula números ímpares
print(num, end=" ")
# Saída: 2 4 6 8 10Comparação break vs continue
# Demonstração de break vs continue
print("Usando break (para no 5):")
for i in range(1, 11):
if i == 5:
break
print(i, end=" ")
# Saída: 1 2 3 4
print("\n\nUsando continue (pula o 5):")
for i in range(1, 11):
if i == 5:
continue
print(i, end=" ")
# Saída: 1 2 3 4 6 7 8 9 10Loops Aninhados
Loops dentro de loops são chamados de loops aninhados. O loop interno completa todas as suas iterações para cada iteração do loop externo.
Fluxo de Loop Aninhado
Exemplos de Loops Aninhados
# Grade de tabuada
print("Tabuada (1-5):")
print(" ", end="")
for j in range(1, 6):
print(f"{j:4d}", end="")
print("\n" + "-" * 25)
for i in range(1, 6):
print(f"{i:2d} |", end="")
for j in range(1, 6):
print(f"{i * j:4d}", end="")
print()Saída:
Tabuada (1-5):
1 2 3 4 5
-------------------------
1 | 1 2 3 4 5
2 | 2 4 6 8 10
3 | 3 6 9 12 15
4 | 4 8 12 16 20
5 | 5 10 15 20 25
Impressão de Padrões com Loops Aninhados
# Imprime um padrão de pirâmide
def imprimir_piramide(altura):
"""Imprime uma pirâmide de asteriscos."""
for i in range(1, altura + 1):
# Imprime espaços
espacos = " " * (altura - i)
# Imprime asteriscos
asteriscos = "*" * (2 * i - 1)
print(espacos + asteriscos)
print("Pirâmide de altura 5:")
imprimir_piramide(5)Saída:
Pirâmide de altura 5:
*
***
*****
*******
*********
A Cláusula else com Loops
Python permite uma cláusula else com loops. Ela executa quando o loop completa normalmente (não via break).
Sintaxe else de Loop
for item in sequencia:
if condicao:
break
else:
# Executa se loop completou sem break
passExemplo else de Loop
# Busca com cláusula else
def buscar_numero(numeros, alvo):
"""Busca um número e reporta se encontrado."""
for num in numeros:
if num == alvo:
print(f"Encontrado {alvo}!")
break
else:
print(f"{alvo} não encontrado na lista.")
buscar_numero([1, 3, 5, 7, 9], 5) # Encontrado
buscar_numero([1, 3, 5, 7, 9], 10) # Não encontradoSaída:
Encontrado 5!
10 não encontrado na lista.
Enumerate e zip
Python fornece funções úteis para trabalhar com loops.
enumerate() - Obter Índice e Valor
frutas = ["maca", "banana", "cereja"]
# Sem enumerate
print("Sem enumerate:")
for i in range(len(frutas)):
print(f" {i}: {frutas[i]}")
# Com enumerate (mais limpo!)
print("\nCom enumerate:")
for indice, fruta in enumerate(frutas):
print(f" {indice}: {fruta}")
# Começando índice em 1
print("\nComeçando em 1:")
for indice, fruta in enumerate(frutas, start=1):
print(f" {indice}. {fruta}")zip() - Iterar Sobre Múltiplas Sequências
nomes = ["Alice", "Bob", "Carlos"]
idades = [25, 30, 35]
cidades = ["SP", "London", "Tokyo"]
print("Usando zip:")
for nome, idade, cidade in zip(nomes, idades, cidades):
print(f" {nome} tem {idade} anos e mora em {cidade}")Saída:
Usando zip:
Alice tem 25 anos e mora em SP
Bob tem 30 anos e mora em London
Carlos tem 35 anos e mora em Tokyo
Exemplo do Mundo Real: Análise de Dados com Loops
# analise_notas.py
def analisar_notas(dados_estudantes):
"""Analisa notas de estudantes usando loops."""
print("=" * 55)
print(" ANÁLISE DE NOTAS DOS ESTUDANTES")
print("=" * 55)
total_estudantes = 0
total_nota = 0
maior_nota = 0
melhor_estudante = ""
menor_nota = 100
pior_estudante = ""
aprovados = 0
reprovados = 0
for nome, nota in dados_estudantes:
total_estudantes += 1
total_nota += nota
# Rastreia maior e menor
if nota > maior_nota:
maior_nota = nota
melhor_estudante = nome
if nota < menor_nota:
menor_nota = nota
pior_estudante = nome
# Conta aprovação/reprovação
if nota >= 60:
aprovados += 1
else:
reprovados += 1
# Imprime resultado individual
status = "APROVADO" if nota >= 60 else "REPROVADO"
print(f" {nome:15s} {nota:6.1f} {status}")
# Resumo
print("-" * 55)
media = total_nota / total_estudantes
print(f" Total Estudantes: {total_estudantes}")
print(f" Média: {media:.1f}")
print(f" Maior Nota: {melhor_estudante} ({maior_nota:.1f})")
print(f" Menor Nota: {pior_estudante} ({menor_nota:.1f})")
print(f" Aprovados: {aprovados}")
print(f" Reprovados: {reprovados}")
print(f" Taxa Aprov.: {aprovados/total_estudantes*100:.1f}%")
print("=" * 55)
# Dados de exemplo
estudantes = [
("Alice", 92.5),
("Bob", 78.0),
("Carlos", 45.0),
("Diana", 88.5),
("Eva", 95.0),
("Frank", 62.0),
("Grace", 71.5),
("Henrique", 55.0),
]
analisar_notas(estudantes)Saída:
=======================================================
ANÁLISE DE NOTAS DOS ESTUDANTES
=======================================================
Alice 92.5 APROVADO
Bob 78.0 APROVADO
Carlos 45.0 REPROVADO
Diana 88.5 APROVADO
Eva 95.0 APROVADO
Frank 62.0 APROVADO
Grace 71.5 APROVADO
Henrique 55.0 REPROVADO
-------------------------------------------------------
Total Estudantes: 8
Média: 73.4
Maior Nota: Eva (95.0)
Menor Nota: Carlos (45.0)
Aprovados: 6
Reprovados: 2
Taxa Aprov.: 75.0%
=======================================================
Exercícios Práticos
Exercício 1: Soma de Números Pares
Escreva um loop que calcula a soma de todos os números pares de 1 a 100.
Exercício 2: Calculadora de Fatorial
Escreva um programa que calcula o fatorial de um número usando um loop for. (5! = 5 × 4 × 3 × 2 × 1 = 120)
Exercício 3: FizzBuzz
Escreva um programa que imprime números de 1 a 100, mas:
- Para múltiplos de 3, imprima "Fizz"
- Para múltiplos de 5, imprima "Buzz"
- Para múltiplos de ambos, imprima "FizzBuzz"
Exercício 4: Verificador de Número Primo
Escreva um programa que verifica se um número é primo usando um loop.
Exercício 5: Inverter uma String
Escreva um loop que inverte uma string sem usar funções de inversão embutidas.
Exercício 6: Impressão de Padrão
Use loops aninhados para imprimir este padrão:
1
12
123
1234
12345
Exercício 7: Jogo de Adivinhação
Crie um jogo completo de adivinhação onde o computador escolhe um número aleatório e o usuário precisa adivinhá-lo. Forneça dicas (muito alto/muito baixo) e conte tentativas.
Exercício 8: Validador de Senha
Escreva um programa que pede uma senha e usa um loop para verificar:
- Pelo menos 8 caracteres
- Contém pelo menos uma letra maiúscula
- Contém pelo menos um dígito Continue pedindo até que uma senha válida seja inserida.
Resumo
Nesta lição, você aprendeu:
- Como usar loops
whilepara repetição baseada em condição - Como usar loops
forpara iteração sobre sequências - Como
range()gera sequências numéricas - Como
breaksai de um loop imediatamente - Como
continuepula para a próxima iteração - Como loops aninhados funcionam e quando usá-los
- Como a cláusula
elsefunciona com loops - Como
enumerate()ezip()melhoram a iteração - Como aplicar loops ao processamento de dados do mundo real
Loops são fundamentais para programação. Domine-os para processar dados eficientemente e implementar algoritmos.