Laço for em Python: percorra qualquer coisa, com exemplos
Este tutorial foi traduzido do original em inglês.Read in EnglishLeer en españolЧитать на русскомอ่านภาษาไทยAvisar sobre um erro de tradução
Imagine que você é professor e tem 30 alunos. Você precisa imprimir um boletim para cada um. Escreveria 30 comandos print separados? Claro que não. Você diria ao computador: "para cada aluno, imprima o boletim dele". É exatamente isso que um laço for faz.
Neste tutorial, você vai aprender a usar o laço for do Python para repetir ações sobre listas, strings, sequências de números e dicionários. Também vai conhecer ferramentas poderosas como enumerate() e zip(), que deixam os laços ainda mais práticos.
Ao final, você vai conseguir processar coleções de dados de forma eficiente, em vez de escrever código repetitivo. Essa é uma das habilidades mais importantes da programação.
Como funciona o laço for em Python?
Um laço for recebe uma coleção de itens e executa o mesmo código uma vez para cada item. A cada passagem pelo laço, uma variável guarda o item atual. O Python chama cada passagem de iteração.
Pense em distribuir cartas. Você pega o baralho e, para cada carta, coloca a carta virada para cima na mesa. A carta muda a cada vez, mas a ação continua a mesma.
apple banana cherry
Esta é a estrutura: a palavra-chave for, um nome de variável (fruit), a palavra-chave in e a coleção (fruits), seguidos de dois-pontos. O código indentado logo abaixo roda uma vez para cada item da lista.
Na primeira iteração, fruit vale "apple". Na segunda, vale "banana". Na terceira, "cherry". Depois do último item, o laço termina e o Python segue para o que vier a seguir.
Added 10, total is now 10 Added 20, total is now 30 Added 30, total is now 60 Added 40, total is now 100 Final total: 100
Esse padrão de começar com um valor e atualizá-lo a cada iteração se chama acumulação. Você vai usá-lo o tempo todo: para somar números, montar strings, juntar resultados e muito mais.
O que range() faz em Python?
Às vezes você não tem uma lista para percorrer: quer apenas repetir algo um número específico de vezes ou passar por uma sequência de números. É para isso que serve range().
range() gera uma sequência de números. Ele não cria uma lista na memória: produz os números um de cada vez, conforme o laço precisa deles. Isso o torna eficiente mesmo para intervalos grandes.
0 1 2 3 4
Repare que range(5) começa em 0 e para antes do 5. Ele gera exatamente 5 números: de 0 a 4. Esse padrão de "começar no zero e parar antes do fim" se repete em todo o Python.
1 2 3 4 5
Com dois argumentos, o primeiro indica onde começar e o segundo onde parar (sem incluí-lo). Então range(1, 6) gera 1, 2, 3, 4, 5.
Count by 2s: 0 2 4 6 8 10 Countdown: 5 4 3 2 1 Blastoff!
O terceiro argumento é o passo (step): quanto somar a cada vez. Um passo de 2 pula um número sim, outro não. Um passo negativo conta de trás para frente. Você pode usar qualquer passo inteiro, positivo ou negativo.
Como percorrer strings e dicionários?
O laço for funciona com qualquer coisa iterável em Python, não só com listas e ranges. Strings e dicionários são dois dos iteráveis mais comuns que você vai percorrer.
Percorrendo uma string
Quando você percorre uma string, recebe um caractere de cada vez. Isso é útil para contar letras, conferir a grafia ou processar um texto caractere por caractere.
P y t h o n
Cada iteração entrega o próximo caractere. O end=" " na função print troca a quebra de linha padrão por um espaço, então todos os caracteres aparecem na mesma linha.
"programming" has 3 vowels
Este exemplo combina um laço for com um if. Para cada caractere, verificamos se ele é uma vogal. Se for, aumentamos a contagem. É o tipo de padrão que você vai escrever o tempo todo.
Percorrendo um dicionário
Quando você percorre um dicionário, recebe as chaves por padrão. Para obter chaves e valores juntos, use o método .items().
Students: Alice Bob Charlie Report card: Alice: 92 Bob: 85 Charlie: 78
O método .items() devolve cada entrada como um par (chave, valor). Ao escrever for name, score in scores.items(), você desempacota cada par em duas variáveis separadas. Isso fica mais limpo do que acessar scores[name] dentro do laço.
O que enumerate() faz em Python?
Às vezes você precisa do item E da posição dele na lista. Daria para usar range(len(list)) e acessar a lista pelo índice manualmente, mas o Python tem um jeito mais limpo: enumerate().
colors = ["red", "green", "blue"]
for i in range(len(colors)):
print(f"{i}: {colors[i]}")colors = ["red", "green", "blue"]
for i, color in enumerate(colors):
print(f"{i}: {color}")enumerate() envolve um iterável e entrega pares (índice, item). Você desempacota cada par em duas variáveis. Os dois exemplos produzem a mesma saída, mas a versão com enumerate() é mais legível e mais pythônica.
Today's to-do list: 1. Buy groceries 2. Clean house 3. Walk dog 4. Cook dinner
O argumento start=1 faz enumerate() começar a contar do 1 em vez do 0. É perfeito para criar listas numeradas, em que um "item 0" não faria sentido para o usuário.
Como zip() permite percorrer várias listas?
E se você tiver duas listas relacionadas e quiser processá-las juntas? Por exemplo, uma lista com nomes de alunos e outra com as notas deles. zip() forma pares entre elas para que você percorra as duas ao mesmo tempo.
Alice: 92 (Pass) Bob: 85 (Pass) Charlie: 78 (Needs improvement)
zip() recebe dois ou mais iteráveis e os combina elemento por elemento. Na primeira iteração, você recebe o primeiro item de cada lista. Na segunda, o segundo item de cada uma, e assim por diante.
Alice Smith, age 25 Bob Jones, age 30 Charlie Brown, age 22
O que são laços for aninhados?
Você pode colocar um laço for dentro de outro. O laço interno roda por completo a cada iteração do laço externo. Isso se chama aninhamento, e é assim que se trabalha com grades, tabelas e combinações.
1 x 1 = 1 1 x 2 = 2 1 x 3 = 3 2 x 1 = 2 2 x 2 = 4 2 x 3 = 6 3 x 1 = 3 3 x 2 = 6 3 x 3 = 9
Quando row vale 1, o laço interno roda com col passando por 1, 2, 3. Depois row passa a valer 2, e o laço interno roda de novo com col passando por 1, 2, 3. O laço interno recomeça do início sempre que o externo avança.
Exercícios práticos
Hora de colocar em prática o que você aprendeu sobre o laço for! Estes exercícios vão da iteração básica até a combinação de laços com as ferramentas que você acabou de ver.
Tente resolver cada exercício sozinho antes de olhar as dicas. Ficar travado e encontrar a solução por conta própria é como você desenvolve habilidades de verdade.
Você recebe uma lista de itens de mercado. Use um laço for para exibir cada item em sua própria linha.
Saída esperada:
milk
eggs
bread
butterUse range() e um laço for para calcular a soma de todos os números de 1 a 10 (incluindo o 10). Exiba o resultado.
Saída esperada:
Sum: 55Sem executar o código, preveja exatamente o que ele vai exibir. Preste muita atenção aos argumentos de range() e à condição do if.
Depois, execute o código para conferir sua resposta.
Este código deveria contar quantas vezes a letra "l" aparece no texto "hello world", mas ele tem bugs. Corrija o código para que ele exiba:
The letter "l" appears 3 timesNão altere a variável word nem o print final: corrija apenas a lógica do laço.
Use enumerate() com start=1 para exibir um cardápio de restaurante numerado.
Saída esperada:
1. Burger - $8.99
2. Pizza - $12.50
3. Salad - $7.25
4. Pasta - $10.00Use um laço for para inverter a string "Python", montando uma nova string caractere por caractere. NÃO use fatiamento ([::-1]) nem a função reversed().
Saída esperada:
nohtyPPercorra o dicionário grades e exiba o nome de cada aluno e o conceito dele. Uma nota de 90 ou mais é "A", de 80 ou mais é "B", de 70 ou mais é "C", e abaixo de 70 é "F".
Saída esperada:
Alice: 95 (A)
Bob: 82 (B)
Charlie: 67 (F)
Diana: 73 (C)Resumo: laço for em Python
Aqui está tudo o que você aprendeu sobre o laço for:
| Padrão | O que faz | Exemplo |
|---|---|---|
for x in list | Percorre cada item | for fruit in fruits: |
for i in range(n) | Repete n vezes (de 0 a n-1) | for i in range(5): |
range(start, stop, step) | Sequência de números personalizada | range(1, 11, 2) |
for char in string | Percorre os caracteres | for c in "hello": |
for k, v in dict.items() | Percorre pares chave-valor | for name, score in grades.items(): |
enumerate(iterable) | Obtém índice + item | for i, x in enumerate(list): |
zip(a, b) | Junta em pares os itens de duas listas | for x, y in zip(names, scores): |
Regras principais para lembrar:
for termina com dois-pontos (:)range() para ANTES do número finalenumerate() é melhor que range(len(...))zip() para na lista mais curtafor student in students)O que vem a seguir?
O laço for é ótimo quando você sabe exatamente o que está percorrendo. Mas e se você quiser continuar repetindo até que alguma condição mude? É aí que entra o laço while. No próximo tutorial, Laço while em Python, você vai aprender a repetir com base em condições em vez de coleções.