Ao desenvolvermos uma aplicação em Python, é comum haver a necessidade de executarmos uma mesma instrução por várias vezes. O comando Python for é uma das estruturas de repetições disponíveis na linguagem que permite a execução de um mesmo comando até que uma determinada condição seja atendida.
As pessoas programadoras precisam entender como esse recurso funciona para identificar com facilidade qual o melhor momento para utilizá-lo ao desenvolver um programa. Nesse post, vamos demonstrar como essa usar essa estrutura por meio dos seguintes tópicos:
- O que é o Python for loop e para que serve?
- Como usar o Python for loop?
- Repetindo os caracteres de uma string!
- Configurando onde o loop deve parar: break
- Interrompendo o loop e continuando no próximo objeto: continue
- Retornando uma sequência de números: range().
- Executando um código quando o loop chega ao fim: else no loop for.
- Usando um loop dentro do outro: laços aninhados
- Como executar um loop sem conteúdo: pass
Continue com a gente e boa leitura!
O que é o Python for loop e para que serve?
A estrutura de repetição for permite executar um bloco de códigos repetidas vezes até que uma condição seja verdadeira. Na linguagem Python, ela é utilizada para percorrer elementos em sequência, como uma string, uma lista, uma tupla ou objetos iteráveis.
É importante entender o conceito de iterável em Python. Basicamente, um objeto iterável é aquele que tem a capacidade de retornar cada um de seus elementos de forma individual. Uma forma de identificar se um objeto é iterável é conferir se ele implementa os métodos __iter__(), que obtém um objeto iterador e o __next__(), que faz a passagem para o próximo elemento.
Outro conceito importante é o de iterador, que além de representar um item do fluxo de dados, também é um objeto iterável e, portanto, implementa as funções __iter__() e __next__(). Essa implementação é transparente para nós, pois ela é feita e controlada pelo for loop.
Na prática, quando o laço for é inicializado, ele executa a instrução ou o bloco de códigos uma vez e utiliza uma referência, que funciona como um índice, para indicar o próximo elemento da sequência. Internamente, ele usa as funções __iter__() e __next__() para que a estrutura de repetição funcione. Por isso, os objetos manipulados com essa estrutura precisam ser iteráveis.
Como usar o Python for loop?
Antes de demonstrarmos como o comando for loop atua, é importante fazer um comparativo com outras linguagens de programação, pois essa estrutura funciona um pouco diferente em Python.
Em algumas linguagens de programação, como em C, JavaScript etc, o for loop é utilizado com uma variável do tipo inteiro, que funciona como um índice e serve para controlar a quantidade de vezes que a repetição será feita. É algo como:
for i = 1 to 10
print(i)
O for loop não funciona dessa maneira em Python. O código feito como o do exemplo acima retorna um erro de execução, pois a estrutura de repetição for só funciona com os tipos de dados que permitem iterações e o tipo numérico nãotem essa característica.A sintaxe básica da estrutura de repetição for em Python é diferente. Veja a seguir:
for <item> in <conjunto_de_itens>:
<bloco_de_codigo>
No qual:
- item: corresponde a cada elemento presente na variável que permite a iteração;
- conjunto_de_itens: pode ser uma lista, uma string, uma tupla, um dicionário ou um objeto que permita iterações.
Veja um código de exemplo:
frutas = ['Abacaxi', 'Morango', 'Uva']
for fruta in frutas:
print(fruta)
# Resultado
Abacaxi
Morango
Uva
No código fonte acima utilizamos uma lista, que é um tipo de dados em Python que permite iterações. Perceba que a variável “frutas” foi declarada anteriormente no código para que o laço de repetição funcione. Outra opção seria escrever a lista diretamente na instrução, como mostramos abaixo:
for fruta in ['Abacaxi', 'Morango', 'Uva']:
print(fruta)
'''
Resultado:
Abacaxi
Morango
Uva
'''
Repetindo os caracteres de uma string!
Como mencionamos, um dos tipos de dados que podem ser utilizados com a estrutura de repetição for é a string. A linguagem Python separa cada caractere como um elemento iterável e podemos utilizar o loop para acessar o seu conteúdo. Veja um exemplo:
palavra = "Vamos estudar Python"
for letra in palavra:
print(letra)
'''
Resultado:
V
a
m
o
s
e
s
t
u
d
a
r
P
y
t
h
o
n
'''
Ao executarmos o código de exemplo acima, perceba que o caractere de espaço também foi considerado válido e a linha correspondente ficou em branco.
Configurando onde o loop deve parar: break
Por padrão, a estrutura de repetição só termina depois de ler o último elemento da variável iterável. Entretanto, é possível modificar essa condição e interromper o loop no meio do caminho. Para isso, utilizamos a instrução break, que encerra a execução do loop ao encontrar uma condição específica.
Devemos utilizar a instrução break em conjunto com uma estrutura condicional, como a if/else ou até mesmo com outro laço de repetição for. Veja como fica a sintaxe da estrutura de repetição quando utilizamos o break:
for <item> in <conjunto_de_itens>:
<bloco_de_codigo>
if <condicao_verdadeira>:
<outras_instrucoes>
break
Veja em um exemplo prático:
pessoas = [({'nome': 'João', 'cidade': 'Belo Horizonte'}),
({'nome': 'Maria', 'cidade': 'São Paulo'}),
({'nome': 'Pedro', 'cidade': 'Curitiba'})]
contador = 0
for pessoa in pessoas:
contador += 1
print(contador)
if pessoa['nome'] == 'Maria':
print(pessoa['nome'], "mora em", pessoa['cidade'])
break
'''
Resultado:
1
2
Maria mora em São Paulo
'''
No código acima, utilizamos o tipo de dados dicionário, que é usado para armazenar valores em pares. Nele, o primeiro elemento corresponde à chave e o segundo, ao valor.
Perceba que criamos uma lista de pessoas e utilizamos a estrutura de repetição for para percorrer cada item da lista. Também usamos a estrutura condicional if para verificar em cada pessoa da lista a que tem o nome de Maria. Ao encontrá-la, exibimos na tela a frase “Maria mora em São Paulo”. A seguir usamos a instrução break para interromper o loop, pois já encontramos a pessoa que queríamos.
Além disso, repare que criamos uma variável chamada contador que imprime o número de vezes que o loop foi executado. Isso foi feito para demonstrar o funcionamento da instrução break, pois sem ela o loop seria executado três vezes, já que temos uma lista com três pessoas.
Interrompendo o loop e continuando no próximo objeto: continue
Assim como podemos interromper a execução da estrutura de repetição, também podemos pular para o próximo item. Isso é feito por meio da instrução continue em conjunto com uma validação, que pode ser feita com uma estrutura condicional ou outro laço de repetição. Veja o exemplo abaixo:
pessoas = [({'nome': 'João', 'cidade': 'Belo Horizonte'}),
({'nome': 'Maria', 'cidade': 'São Paulo'}),
({'nome': 'Pedro', 'cidade': 'Curitiba'})]
contador = 0
for pessoa in pessoas:
contador += 1
if pessoa['nome'] == 'Maria':
continue
print(contador)
print(pessoa['nome'], "mora em", pessoa['cidade'])
'''
Resultado:
1
João mora em Belo Horizonte
3
Pedro mora em Curitiba
'''
Perceba que modificamos o código do exemplo anterior. Agora, pulamos para o próximo item ao encontrarmos a pessoa de nome “Maria”. Veja que exibimos na tela o contador e a frase com o nome e a cidade de cada elemento da lista. Como utilizamos a instrução continue, a exibição do contador e a frase não foram exibidas para o segundo elemento.
Retornando uma sequência de números: range().
Antes de falarmos sobre o range() na estrutura de repetição for, vamos ver brevemente o que ele faz. A função range() retorna uma série de números consecutivos. Por padrão, ela inicia no número 0 e é incrementada adicionando 1.
O comando range(4), por exemplo, retornará o seguinte valor : “0, 1, 2, 3”, pois ao chegar ao número 4, o loop será concluído. A sintaxe da função range() é:
range(início, parada, incremento)
No qual:
- início: é um valor opcional e corresponde a partir de qual número o range será iniciado;
- parada: é um valor obrigatório e indica o número de parada do range;
- incremento: é opcional e indica o valor que queremos adicionar entre um item e outro.
A função range() é utilizada na estrutura de repetição for para executarmos um determinado conjunto de instruções pela quantidade de vezes indicadas na função. Veja um exemplo:
for numero in range(10):
if numero % 2 == 0:
print("O número", numero, "é par")
'''
Resultado:
O número 0 é par
O número 2 é par
O número 4 é par
O número 6 é par
O número 8 é par
'''
No código acima, utilizamos a função range() para descobrir os números pares em um determinado intervalo numérico. Perceba que no resultado do processamento o número 10 não foi listado. Como mencionamos, a função range() inicia a contagem a partir do número 0 e o valor 10 corresponde ao ponto de parada do loop.
Portanto, se quiséssemos considerar o número 10 nesse código, teríamos que adequar o valor da função para range(11). Também podemos definir um escopo diferente para o range. Veja o código a seguir:
for numero in range(10, 21):
if numero % 2 == 0:
print("O número", numero, "é par")
Resultado:
O número 10 é par
O número 12 é par
O número 14 é par
O número 16 é par
O número 18 é par
O número 20 é par
'''
Perceba que nesse exemplo utilizamos o range(10, 21). Na prática, dissemos ao compilador para considerar que o primeiro número será o 10 e o ponto de parada será no número 21. Nesse caso, o número 20 foi listado como número par.
Executando um código quando o loop chega ao fim: else no loop for.
A estrutura de repetição for também pode ser utilizada com a cláusula else. Na prática, ela funciona quando o loop é encerrado sem nenhuma interrupção, como se utilizássemos a instrução break. É importante dizer que a cláusula else na estrutura de repetição for é opcional. Veja a sintaxe do loop for com a instrução else:
for <item> in <conjunto_de_itens>:
<bloco_de_codigo>
else:
<novo_bloco_de_codigo>
Veja um pequeno exemplo:
frutas = ['Abacaxi', 'Morango', 'Uva']
for fruta in frutas:
print(fruta)
else:
print("Laço de repetição finalizado.")
'''
Resultado:
Abacaxi
Morango
Uva
Laço de repetição finalizado.
'''
Usando um loop dentro do outro: laços aninhados
Existem situações em que precisamos percorrer outra variável iterável dentro de uma estrutura de repetição. Para isso, utilizamos um loop dentro do outro. Vale ressaltar que é importante ter cuidado com esse tipo de implementação para não criar códigos com muitas repetições aninhadas, pois ele se torna confuso e de difícil manutenção. Entretanto, é preciso entender como utilizar laços aninhados. Veja um exemplo:
for numero_coluna1 in range(2, 5):
print("Tabuada do ", numero_coluna1)
for numero_coluna2 in range(11):
print(numero_coluna1, "x", numero_coluna2, " = ", numero_coluna1 * numero_coluna2)
'''
Resultado:
Tabuada do 2
2 x 0 = 0
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
2 x 10 = 20
Tabuada do 3
3 x 0 = 0
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
3 x 5 = 15
3 x 6 = 18
3 x 7 = 21
3 x 8 = 24
3 x 9 = 27
3 x 10 = 30
Tabuada do 4
4 x 0 = 0
4 x 1 = 4
4 x 2 = 8
4 x 3 = 12
4 x 4 = 16
4 x 5 = 20
4 x 6 = 24
4 x 7 = 28
4 x 8 = 32
4 x 9 = 36
4 x 10 = 40
'''
No código acima utilizamos a estrutura de repetição for para construir a tabuada dos números 2, 3 e 4. Perceba que também utilizamos a função range() para delimitar os números da tabuada.
Como executar um loop sem conteúdo: pass
Quando utilizamos a estrutura de repetição for na linguagem Python, não podemos deixá-la em branco, ou seja, sem executar nenhuma instrução. Porém isso pode ser necessário, ainda mais durante a etapa de desenvolvimento de uma aplicação, em que queremos deixar a implementação interna para um segundo momento, mas queremos sinalizar que será preciso ter um loop naquele ponto do código.
Uma forma de fazer isso é por meio da instrução pass. Na prática, ela permite a criação da instrução sem que nenhuma ação seja executada. Veja um exemplo:
for numero in range(10):
pass
A estrutura de repetição Python for é usada com objetos iteráveis para repetirmos uma ou várias instruções com cada item de uma sequência. Ela contém características próprias da linguagem, como a utilização das declarações break, continue, else e pass, além do uso da função range(), que permite determinar a quantidade de repetições.
Gostou do nosso conteúdo sobre como utilizar o comando for Python? Então confira nosso post sobre o que faz uma pessoa desenvolvedora de software e como seguir essa carreira!