Em geral, num programa, as instruções são executadas sequencialmente uma-a-uma: a primeira instrução é executada em primeiro lugar, seguida da segunda, e assim sucessivamente.
No entanto, há situações em que queremos executar um bloco de código um determinado número de vezes ou enquanto se verificar uma determinada condição. Um ciclo, permite-nos executar uma instrução ou instruções repetidamente, ou seja, "em ciclo".
Quando se conhece o número máximo de vezes que se irá repetir a sequência de instruções - repetição definida, devemos usar um ciclo for. No caso em que se pretenda repetir a sequência de instruções enquanto uma condição se verifique – repetição indefinida, temos de usar o ciclo while.
Ciclo for e função range
O ciclo for é das maneiras mais simples em Python de repetir uma instrução n vezes. Pode ser implementado com diferentes estruturas de dados: valores numéricos, dados alfanuméricos (strings) e listas.
Fluxograma do ciclo for:
Com o ciclo for, aparece-nos quase sempre acoplada a função range.
Exemplo - escrever 10 vezes «Olá Mundo»:
for i in range(10):
print("Olá Mundo!")
Olá Mundo!
Olá Mundo!
Olá Mundo!
Olá Mundo!
Olá Mundo!
Olá Mundo!
Olá Mundo!
Olá Mundo!
Olá Mundo!
Olá Mundo!
Exemplo - imprimir os 10 primeiros números inteiros, incluindo o zero:
for i in range(10):
print(i)
0
1
2
3
4
5
6
7
8
9
A função range gera uma lista de valores e pode ser usada com 1, 2 ou 3 parâmetros:
1 parâmetro - significa que estamos a definir o número inteiro em que o ciclo, iniciado em 0 (zero), termina (não incluído).
2 parâmetros - definimos o número inteiro inicial (incluído) e o número inteiro do fim do ciclo (não incluído).
3 parâmetros - temos uma situação similar à de 2 parâmetros, em termos do número de início e de fim do ciclo. No entanto, o terceiro parâmetro define o incremento/decremento do ciclo. Por exemplo, se for 2, indica que o ciclo salta de 2 em 2 números.
Exemplos:
range(5)
range(3,9)
range(3,11,2)
[0,1,2,3,4]
[3,4,5,6,7,8]
[3,5,7,9]
Nota: Todos os parâmetros devem ser inteiros, podendo ser positivos ou negativos.
Exemplo - imprimir os números ímpares entre [1,10]:
for i in range(1,10,2):
print(i)
1
3
5
7
9
Exemplo - imprimir os números pares entre [1,10]:
for i in range(2,10,2):
print(i)
2
4
6
8
Note-se que esta resolução está errada, pois o número 10 ficou de fora da lista. Isto acontece, porque o segundo parâmetro da função range indica o valor em que o ciclo para (no caso o número 10). Consequentemente, a impressão do número 10 já não é efetuada.
Para que a resolução estivesse correta (o número 10 tivesse sido impresso), deveríamos ter indicado 11, como segundo parâmetro da função range.
Exemplo:
for i in range(2,11,2):
print(i)
2
4
6
8
10
Exemplo - imprimir os números inteiros entre [1,n]:
n=int(input(""))
for i in range(1,n+1):
print(i)
5
1
2
3
4
5
Exemplo - calcular a soma dos quadrados dos números entre [1,5]:
soma=0
for i in range(1,6):
soma+=i**2 # Alternativamente, soma=soma+i**2
print(soma)
55
De uma forma genérica, pode-se afirmar que o for funciona com uma lista de valores, qualquer que ela seja. Esta forma de funcionamento é típica das linguagens de programação modernas. Nas linguagens clássicas (por exemplo, C/C++, Pascal, etc.) os ciclos for iteram números inteiros e não listas.
Exemplo - imprimir os números primos até 20:
for i in [2,3,5,7,11,13,17,19]:
print(i)
2
3
5
7
11
13
17
19
Exemplo - imprimir uma lista de frutos:
for fruto in ["banana","maça","pêra","laranja"]:
print(fruto)
banana
maça
pêra
laranja
Exemplo - imprimir as letras do nome "Paulo" (uma por linha):
for letra in "Paulo":
print(letra)
P
a
u
l
o
Exemplo - imprimir todas as letras do alfabeto:
import string # É necessário importar esta biblioteca para trabalhar com os recursos de strings
for letra in string.ascii_lowercase:
print(letra)
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
while
A palavra while significa em português enquanto. Um ciclo while executa uma instrução ou conjunto de instruções enquanto a condição indicada for verdadeira.
No caso geral, a instrução tem o seguinte formato:
while (condição)
instrução
[instrução]
Um ciclo while funciona da seguinte forma:
Começa por ser testada, a condição expressa no ciclo while.
Se a condição for verdadeira, é executada a instrução seguinte.
Depois de executar a instrução, volta a testar a condição do ciclo e continua assim, indefinidamente, enquanto a condição for verdadeira.
Termina quando a condição é falsa.
Fluxograma do ciclo while:
Exemplo - imprime os números inteiros de 1 a 100:
i=1
while(i<=100):
print(i)
i+=1 # Alternativamente, i=i+1
Nota: Este exemplo poderia estar escrito recorrendo ao ciclo for.
Exemplo - imprime a soma acumulada de 1 e ao número corrente em cada iteração do ciclo (variável i), enquanto a soma for inferior a 100:
i=1
soma=1
while (soma<100):
print("A soma acumulada de 1 a",i,"é",soma)
i=i+1
soma=soma+i
A soma acumulada de 1 a 1 é 1
A soma acumulada de 1 a 2 é 3
A soma acumulada de 1 a 3 é 6
A soma acumulada de 1 a 4 é 10
A soma acumulada de 1 a 5 é 15
A soma acumulada de 1 a 6 é 21
A soma acumulada de 1 a 7 é 28
A soma acumulada de 1 a 8 é 36
A soma acumulada de 1 a 9 é 45
A soma acumulada de 1 a 10 é 55
A soma acumulada de 1 a 11 é 66
A soma acumulada de 1 a 12 é 78
A soma acumulada de 1 a 13 é 91
Exemplo - calcula a soma acumulada dos números digitados:
soma=0
num=0
while (num!=0 or soma==0):
num=int(input("Digite um número inteiro (ou 0 para terminar): "))
soma+=num # Alternativamente, soma=soma+num
print("A soma dos números digitados é:",soma)
Digite um número inteiro (ou 0 para terminar): 1
Digite um número inteiro (ou 0 para terminar): 2
Digite um número inteiro (ou 0 para terminar): 3
Digite um número inteiro (ou 0 para terminar): 0
A soma dos números digitados é: 6
Nota: A condição "genérica" do ciclo é (num!=0). No entanto, no primeiro caso, como num é igual a zero, a condição (num!=0) é falsa, logo o ciclo nunca seria executado. Uma das várias alternativas possíveis, é considerar a condição (num!=0 or soma==0), porque no primeiro caso a soma é zero.
break
A instrução break força a interrupção de um ciclo.
Exemplo:
soma=0
conta=0
while True:
num=int(input("Digite um número inteiro (ou 0 para terminar): "))
if num==0:
break
soma+=num
conta+=1
print("A contagem de números digitados é:",conta)
print("A média dos números digitados é: {0:.2f}".format(soma/conta))
Nota: while True significa que o ciclo será executado para sempre/do forever (condição sempre verdadeira). Para terminar um ciclo deste tipo temos que forçar a saída com break.
continue
A instrução continue faz com que o programa ignore as instruções seguintes do ciclo e comece uma nova iteração no início do ciclo.
for letra in "Python":
if letra=="h":
continue
print(letra)
P
y
t
o
n
Nota: A letra h não foi impressa porque o programa não passou pela instrução print(letra), pois o continue fez saltar o programa para o início do ciclo quando a letra é h.
else
O conteúdo da seção else de um ciclo é executado apenas quando o ciclo termina "normalmente" (for/while sem break e não houve exceção provocada por erro).
Exemplo - verificar se o número 5 consta da lista de valores, emitindo a mensagem «Não encontrado!» caso o 5 não conste da lista.
...
for valor in valores:
if valor==5:
print("Encontrado!")
break
else:
print("Não encontrado!")
Nota: supõe-se que a lista de valores foi previamente carregada em instruções anteriores.