Laços (loops) executam um bloco de código múltiplas vezes.
Eles são essenciais para processar coleções e repetir tarefas.
Primeiramente, for itera sobre sequências como listas.
Por exemplo, for item in lista: print(item).
Além disso, while repete enquanto uma condição for verdadeira.
Assim, você evita escrever o mesmo código várias vezes.
Consequentemente, programas ficam mais curtos e manuteníveis.
Quando utilizar cada laço? for para número conhecido de iterações.
while para repetições baseadas em condição.
Por outro lado, evite loops infinitos sem controle.
Python também tem break e continue para controle.
Então, vamos explorar sintaxe, padrões e boas práticas.
Três subtítulos guiarão você pelos laços em Python.
Portanto, ao final, você dominará a repetição de código eficiente.
For: iterando sobre sequências
for percorre qualquer iterável: listas, strings, ranges.
Ele atribui cada elemento à variável do laço.
Quando usar for? Em coleções de tamanho conhecido.
Também para processar arquivos linha a linha.
Além disso, for é mais legível que while para coleções.
Exemplo de for:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# For com lista frutas = ["maçã", "banana", "laranja", "uva"] print("=== For com lista ===") for fruta in frutas: print(f"Fruta: {fruta}") # For com range print("\n=== For com range ===") for i in range(5): print(f"i = {i}") # For com range (início, fim, passo) print("\n=== For com passo ===") for i in range(2, 10, 2): print(f"Par: {i}") # For com string print("\n=== For com string ===") palavra = "Python" for letra in palavra: print(f"Letra: {letra}") # For com enumerate (índice e valor) print("\n=== For com enumerate ===") for indice, fruta in enumerate(frutas): print(f"{indice}: {fruta}") # For com dicionário pessoa = {"nome": "Ana", "idade": 25, "cidade": "São Paulo"} print("\n=== For com dicionário ===") for chave, valor in pessoa.items(): print(f"{chave}: {valor}") # For aninhado print("\n=== For aninhado (tabuada) ===") for i in range(1, 4): for j in range(1, 4): print(f"{i} x {j} = {i*j}") print("---") |
for é o laço mais usado em Python.
Ele é limpo, legível e evita erros de índice.
Portanto, prefira for sempre que possível.
While: repetindo baseado em condição
while executa enquanto a condição for verdadeira.
Cuidado com loops infinitos: a condição precisa mudar.
Quando usar while? Em número desconhecido de repetições.
Por exemplo, aguardar entrada do usuário ou processar dados.
Assim, você tem controle total sobre quando parar.
Exemplo de while:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# While básico print("=== While básico ===") contador = 0 while contador < 5: print(f"Contador: {contador}") contador += 1 # While com input do usuário print("\n=== While com validação ===") senha_correta = "1234" tentativas = 0 senha = "" # Simulação sem input para demonstração senha = "1234" # Simulando acerto while senha != senha_correta and tentativas < 3: tentativas += 1 print(f"Tentativa {tentativas}") # senha = input("Digite a senha: ") # Em programa real if senha == senha_correta: print("Acesso permitido!") elif tentativas >= 3: print("Acesso bloqueado!") else: print("Senha incorreta, tente novamente") break # Para não repetir na simulação # While com break print("\n=== While com break ===") numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] i = 0 while i < len(numeros): if numeros[i] == 5: print(f"Encontrado 5 na posição {i}") break i += 1 # While com continue print("\n=== While com continue ===") i = 0 while i < 10: i += 1 if i % 2 == 0: continue # Pula pares print(f"Ímpar: {i}") # While com else (executa se não houve break) print("\n=== While com else ===") busca = 10 i = 0 while i < 5: if i == busca: print(f"Encontrado {busca}") break i += 1 else: print(f"{busca} não encontrado na faixa") |
while é poderoso para loops baseados em condição.
Sempre garanta que a condição eventualmente se torne falsa.
Portanto, use while quando o número de iterações for incerto.
Break, continue e else em laços
break encerra o laço imediatamente.
continue pula para a próxima iteração.
else executa se o laço terminou sem break.
Quando usar esses comandos? Para controle fino de fluxo.
Além disso, eles tornam o código mais expressivo.
Exemplo completo:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# Break: parar antecipadamente print("=== Break ===") for i in range(10): if i == 5: print("Parando no 5") break print(i) # Continue: pular iteração print("\n=== Continue ===") for i in range(10): if i % 2 == 0: continue print(f"Ímpar: {i}") # Else em for (executa se não houve break) print("\n=== Else em for ===") for i in range(5): print(i) else: print("Laço completou normalmente (sem break)") # Else com break (não executa) print("\n=== Else com break ===") for i in range(5): if i == 3: print("Break no 3") break print(i) else: print("Este else não executa") # Exemplo prático: buscar em lista print("\n=== Busca com break/else ===") def buscar(lista, alvo): for item in lista: if item == alvo: print(f"Encontrado {alvo}") break else: print(f"{alvo} não encontrado") buscar([1, 2, 3, 4, 5], 3) buscar([1, 2, 3, 4, 5], 10) # For com range reverso print("\n=== Range reverso ===") for i in range(5, 0, -1): print(f"Contagem regressiva: {i}") # While infinito controlado (com break) print("\n=== While com break controlado ===") contador = 0 while True: print(f"Loop {contador}") contador += 1 if contador >= 3: print("Saindo do loop infinito") break |
Laços são fundamentais para processamento repetitivo.
A fórmula da complexidade de um laço é:
\(T = \text{iterações} \times \text{tempo\_por\_iteração}\)
Use for para coleções e while para condições.
break e continue dão controle refinado.
Portanto, mantenha laços simples e evite aninhamento excessivo.
Seu código será mais eficiente e fácil de entender.
Finalmente, pratique com diferentes tipos de laços.