Laço de repetição, ou loop, é muito importante e existe em qualquer linguagem de programação; o laço permite executar um bloco de código repetidamente com base em uma condição.
Existem dois tipos principais de laços de repetição em Python: o for, while e loops aninhados (um dentro do outro):
- for: executa uma sequência de instruções várias vezes. abrevia o código que gerencia a variável do loop
- While: repete enquanto uma determinada condição for VERDADEIRA. Ele testa a condição antes de executar o corpo do loop.
- laço aninhado: Você pode usar um ou mais loops dentro de qualquer outro loop while, for ou do..while.
Uma coisa importante que você deverá saber é sobre o escopo, ou seja, tudo que está dentro do loop não é “enxergado” pelos elementos que estão fora do “bloco” do laço. Quando a execução sai de um escopo, todos os objetos automáticos criados nesse escopo são destruídos.
Podemos controlar os loops através de “declarações de controle de loop”. Veja: Aprendendo Python Sozinho: Usando “continue”, “break” e “pass”
Usando o laço “for”
#1 repita por 10 vezes e imprima o valor de i
for i in range(10): print(i)
O resultado será esse:
0
1
2
3
4
5
6
7
8
9
#2 Agora, imprima de 3 até 10, mas pulando de dois em dois
for i in range(3, 10, 2): print(i)
Resultado:
3
5
7
9
#3 abaixo misturo laço for com if para saber se um número é par ou impar. Se o resto (%) da divisão for igual ( == ) a zero então é par, senão será impar.
Tenho, antes de tudo, um array com números que vão de 1 a 10.
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] for numero in numeros: if numero % 2 == 0: print(f"{numero} é par") else: print(f"{numero} é ímpar")
1 é ímpar
2 é par
3 é ímpar
4 é par
5 é ímpar
6 é par
7 é ímpar
8 é par
9 é ímpar
10 é par
#4 criei um array (conjunto) com frutas. O laço for irá imprimir e quando finalizar irá imprimir “lista de frutas finalizada”.
frutas = ["abacaxi", "banana", "maçã"] for fruta in frutas: print(fruta) else: print("Lista de frutas finalizada.")
abacaxi
banana
maçã
Lista de frutas finalizada.
#5 temos agora um exemplo de loop for aninhado.
linhas = 5 colunas = 3 for linha in range(linhas): for coluna in range(colunas): print(f"({linha}, {coluna})")
(0, 0)
(0, 1)
(0, 2)
(1, 0)
(1, 1)
(1, 2)
(2, 0)
(2, 1)
(2, 2)
(3, 0)
(3, 1)
(3, 2)
(4, 0)
(4, 1)
(4, 2)
#6 Usamos a função enumerate() para adicionar um contador a um iterável (como uma lista, tupla, string, etc.) e retornar um objeto enumerado. Esse objeto fornece pares de índice e valor durante a iteração, o que pode ser útil em muitos cenários.
frutas = ["abacaxi", "banana", "maçã"] for indice, fruta in enumerate(frutas): print(f"Índice: {indice}, Fruta: {fruta}")
Índice: 0, Fruta: abacaxi
Índice: 1, Fruta: banana
Índice: 2, Fruta: maçã
Neste exemplo, a função enumerate() adiciona um índice a cada fruta na lista frutas. Durante a iteração, o bloco de código dentro do laço “for” imprime o índice e o valor da fruta.
#7 a instrução continue usamos no post anterior: Usando “continue”, “break” e “pass” – ele faz com que ocorra um “pulo”, ou seja, o resultado não seja impresso, pula para o próximo.
Abaixo, toda vez que o resto da divisão de “i” for zero não será impressa a variável.
for i in range(10): if i % 2 == 0: continue print(i)
1
3
5
7
9
Usando o laço while
O laço “while” executa um bloco de código repetidamente enquanto uma condição especificada for verdadeira. A condição é verificada antes de cada iteração.
Vamos aos exemplos.
#1 abaixo, a variável numero recebe 1. Enquanto numero for menor ou igual a 5 imprima o valor de número. Após imprimir, incremente (acrescente) mais 1 à variável numero.
numero = 1 while numero <= 5: print(numero) numero += 1
1
2
3
4
5
#2 agora, tenho uma variável booleana chamada ativo. Enquanto ativo for verdadeiro (true) repita. Esse código irá gerar um loop infinito, sem fim, pois nunca irá parar, a não ser que tenha intervenção do usuário para fechar a janela.
ativo = True while ativo: if not ativo: break
#3 enquanto for verdadeiro, imprima a palavra “numero” e incremente 1 á variável numero. Se número for maior que 10 então pare (break).
numero = 1 while True: print(numero) numero += 1 if numero > 10: break
1
2
3
4
5
6
7
8
9
10
#4 Vamos à essa outra demonstração.
Inicia um loop “while” que continuará executando enquanto a variável “nome” estiver vazia (ou seja, enquanto o usuário não tiver digitado um nome).
nome = "" while not nome: nome = input("Digite seu nome: ") print(f"Olá, {nome}!")
Digite seu nome: Maria
Olá, Maria
#5 nesse exemplo, advinhamos (risos) qual número foi digitado pelo usuário:
numero = 0 while not numero or numero < 1 or numero > 10: try: numero = int(input("Digite um número entre 1 e 10: ")) except ValueError: print("Valor inválido. Digite um número inteiro.") print(f"Você digitou o número {numero}.")
Digite um número entre 1 e 10: 4
Você digitou o número 4.
#6 Para esse último teste, criei um arquivo chamado meu_arquivo.txt, coloquei um texto dentro dele e executei linhas em Python para ler o conteúdo:
touch meu_arquivo.txt
echo "um arquivo de teste em python" > meu_arquivo.txt
Esse é o script Python:
with open("meu_arquivo.txt", "r") as arquivo: linha = arquivo.readline() while linha: print(linha.strip()) linha = arquivo.readline()
Esse é o resultado:
um arquivo de teste em python
Laço aninhado
Laços aninhados referem-se à prática de colocar um laço dentro de outro. Isso é frequentemente usado para iterar sobre estruturas de dados multidimensionais, como listas de listas ou matrizes.
#1 Imprimindo uma tabela de multiplicação:
for linha in range(1, 11): for coluna in range(1, 11): print(f"{linha} x {coluna} = {linha * coluna}")
1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
1 x 4 = 4
1 x 5 = 5
1 x 6 = 6
1 x 7 = 7
1 x 8 = 8
1 x 9 = 9
1 x 10 = 10
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
.......
#2 exemplo com um array com mais de uma dimensão
matriz = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] for linha in matriz: for elemento in linha: print(elemento)
1
2
3
4
5
6
7
8
9