As estruturas de repetição no python podem ser do tipo for e while.
A estrutura for faz com que o contador assuma todos os valores em lista, conjunto, tupla, range ou até mesmo textos. Considere os exemplos:
# em uma lista
for i in ['a','b','c']:
print(i)
# em uma conjunto
for i in {'a','b','c'}:
print(i)
# em uma tupla
for i in ('a','b','c'):
print(i)
# em um string
for i in ('abc'):
print(i)
Em todos estes casos o resultado gerado é:
a
b
c
Se a sequência for um range, ela é obrigatoriamente numérica.
# em um range, informado apenas o limite superior (que não é incluído)
for i in range(3):
print(i)
Que gera os resultados:
0
1
2
Outraa formas de range está apresentada abaixo (com início, fim e passo)
# em um range, informado o ínicio, fim e passo (o fim não é incluído)
for i in range(4,12,2):
print(i)
Que gera os resultados:
4
6
8
10
É absolutamente análoga ao for; contudo, possui uma inicialização do contador e atualização do contador (ou outro critério de parada).
i = 1 # inicialização do contador
while i<5:
print(i)
i=i+1 # atualização do contador
Que retorna os resultados
1
2
3
4
Os comandos break, continue e pass na estrutura dos loops com os seguintes objetivos:
No exemplo abaixo, o comando continue faz com que, quando i==3
, não se executa a linha de imprimir (i) (que está abaixo do continue), e continua o loop a partir do próximo contador.
i = 0
while i<=5:
i = i+1
if i==3:
continue
print(i)
O programa retorna:
1
2
4
5
6
O comando break nos casos abaixo, quando i==3
, faz com que se interrompa a execução do loop e (saindo do loop).
i = 0
while i<=5:
i = i+1
if i==3:
break
print(i)
for i in range(1,7):
if i==3:
break
print(i)
Nos dois casos, o programa retorna:
1
2
O comando pass é usado para não deixar o loop em branco (o que não seria permitido).
for i in range(1,7):
pass
No python, é possível montar loops implícitos, retornando um gerador de listas. A sintaxe é a seguinte:
(procedimento for elemento in conjunto)
No procedimento não é possível atribuir uma variável; contudo, é possível computar um resultado a partir do contador. Os resultados serão armazenados na lista de saída.
Exemplo
Por exemplo, suponha que se tenha uma lista [2,3,4]
que queiramos multiplicar cada elemento por 2. Na estrutura de loop implícito, podemos escrever:
lista = [3,4,5]
list(2*i for i in lista)
Para cada elemento i
da lista ele irá multiplicar por 2*i
, e retornar a lista com os estes valores. Ele retorna
[6,8,10]
Exemplo
Suponha que tenhamos uma lista lista = [3,4,5,6,7,8]
que queremos saber se todos são pares. A função int(i/2)==i/2
pergunta se o inteiro da divisão do i/2
é igual ao número i/2
; se isto ocorrer o número é par. Para perguntar se toda a lista é par, fazemos:
lista = [3,4,5,6,7,8]
list(int(i/2)==i/2 for i in lista)
Ele retorna:
[False, True, False, True, False, True]
Exemplo
Outro exemplo é a geração de vetores linearmente espaçados entre dois limites (a,b)
, com n
pontos de espaçamento.
a =5;b = 7; n = 8; #limites inferior, superior e número de pontos
dx = (b-a)/(n-1) # calcula o espaçamento
lista = list(a+i*dx for i in range(n)) # cria uma lista igualmente espaçada
print(lista)
O resultado gerado é
[5.0, 5.285714285714286, 5.571428571428571, 5.857142857142857, 6.142857142857142, 6.428571428571429, 6.714285714285714, 7.0]