Sintaxe de loops no Python

Neste post iremos demonstrar a utilização básica dos loops While e For. Ambas são sintaxes bem simples no Python.

*update 19/12/2017*: Incluindo utilização das funções range e zip;
*update 19/12/2017*:
Explicação da iteração feita em dicionários;

 

 

While Loop:

max = 100
i = 0
soma = 0 

while i < max:
    soma += i
    i += 1

O loop acima repete 100 vezes a operação de soma e incrementa a variável i.

 

For Loop:

for caractere in "Raccoon.Ninja":
    print(caractere)

O fonte acima demonstra um loop utilizando For, mostrando na tela cada letra da string “Raccoon.Ninja”.

Abaixo utilizamos o loop for para mostrar cada item de um vetor:

linguagens = ['Python', 'PHP', 'C#', 'PowerBuilder', 'Cobol']

for linguagem in linguagens:
    print(linguagem)

 

Algumas vezes, precisamos fazer uma iteração em um vetor e utilizar o índice para acessar os valores. Existem algumas formas de se fazer isso. Veja abaixo duas formas de se fazer isso:

linguagens = ['Python', 'PHP', 'C#', 'PowerBuilder', 'Cobol']
tamanho = len(linguagens)
indices = range(tamanho)

for i in indices:
    print(linguagens[i])

No código acima, pegamos o tamanho do vetor (utilizando a função len), depois criamos um vetor numérico sequencial (utilizando a função range).

Depois disso, basta acessar as posições dos vetores.

O próximo exemplo demonstra uma maneira mais simples de fazer isso:

linguagens = ['Python', 'PHP', 'C#', 'PowerBuilder', 'Cobol']

for i, valor in enumerate(linguagens):
    print("Linguagem: " + valor)
    print("Indice: " + str(i))

No fonte acima, utilizamos a função enumerate, que vai retornar um vetor de iterators.

 

Pode ser que a sua necessidade para criar um loop venha da quantidade de vezes que você precisa repetir uma determinada ação. Neste caso, podemos utilizar a função range.

for i in range(10):
    print(i)

O fonte acima fará o python mostrar no console números de 0 a 9, totalizando 10 números. Se você precisar fazer repetir n vezes uma ação, utilize o range(n) para gerar o número correto de loops.

 

Loop de duas (ou mais) listas ao mesmo tempo:

Outra coisa que o Python resolve muito bem é realizar a iteração entre diversas listas ao mesmo tempo.

Considere as seguintes listas:

lista_1 = [ "bacon", "fritas", "picanha" ]
lista_2 = [ "cerveja", "refri", "suco" ]

 

Para realizar uma iteração com as duas listas, basta utilizar a função zip:

for alimento, bebida in zip(lista_1, lista_2):
    print(alimento, bebida)

Pronto. Feita a interação. Porém, existe um cuidado para se tomar, quando utilizamos esta função.

O Python considera a menor lista informada para fazer a iteração conjunta, ou seja, se a lista_1 possuir 3 itens, mas a lista_2 possuir apenas 1 item, o loop terá apenas 1 repetição.

 

Realizando iterações em um dicionário:

Dicionários no Python são extremamente úteis, mas eles exigem um cuidado extra.

Considere o dict abaixo:

lista = {
    "alimento": "Bacon",
    "veiculo": "Carro",
    "animal": "Cachorro",
    "bebida": "Cerveja"
}

 

Veja o que acontece se fizermos uma iteração simples?

>>> for item in lista:
...    print(item)

alimento
veiculo
animal
bebida

Então… esta iteração não funcionou bem, pois o Python imprimiu as chaves e não os valores. Como resolver isso?

Existem algumas formas…

Primeiro, se você realmente precisar de fazer uma iteração apenas pelas chaves do dicionário, sugiro fazer conforme o exemplo abaixo:

#Python 3
for chave in lista.keys():
    print(chave)

#Python 2
for chave in lista.iterkeys():
    print(chave)

Esta sintaxe terá o mesmo resultado da tentativa anterior, mas está mais legível.

 

Para fazer uma iteração apenas pelos valores do dicionário:

for item in lista.values():
    print(item)

Com esta sintaxe, você fará a iteração pelos valores do dict, mas não terá acesso às chaves.

 

Abaixo está a sintaxe para realizar a iteração pela chave e pelo valor:

#Python 3
for chave, item in lista.items():
    print("%s: %s" % (chave, item))

#Python 2
for chave, item in lista.iteritems():
    print "%s: %s" % (chave, item)

Na sintaxe acima, você tem acesso a chave E ao valor de cada item do dicionário. Só para ficar mais simpático o retorno, utilizei a formatação de strings.

 

Atenção! Em algumas sintaxes fiz uma distinção entre Python 2 e Python 3, pois as funções iterkeys() e iteritems() foram removidas no Python 3 e as funções keys() e items() não existem no Python 2. Cuidado para não trocar as bolas e acabar fazendo seu código não compilar.

 

Antes de encerrar o assunto dicionario (pelo menos para este update), que tal fazer uma iteração onde você tem o indice do item, a chave E o valor?

for i, chave, item in zip(range(len(lista)), lista.keys(), lista.values()):
    print("%d - %s: \t%s" % (i, chave, item))

No fonte acima, utilizamos a função Zip, passando 3 argumentos:

  • range(len(lista)): Criamos um range (explicado acima neste post), passando como argumento dele o tamanho da nossa lista;
  • lista.keys(): Retorna uma lista com as chaves do dicionário;
  • lista.values(): Retorna uma lista com os valores do dicionário;

Para cada iteração deste loop, será impresso o índice, a chave  e o valor. Ficará algo do tipo:

0 - alimento: 	Bacon
1 - veiculo: 	Carro
2 - animal: 	Cachorro
3 - bebida: 	Cerveja

 

Como sair do loop:

Para sair do Loop, utilize o comando break. Ele vai sair tanto do loop while quanto do for.

 

“Pular” uma repetição do loop:

Para pular uma das repetições do loop, utilize o comando continue.

The following two tabs change content below.
Arquiteto de Software e Desenvolvedor Backend (quase Fullstack), geralmente trabalho com C#, PowerShell, Python, Golang, bash e Unity (esse é mais por hobby). Estou sempre buscando algo novo para aprender, adicionando novas ferramentas ao meu cinto de utilidades.
Posted in Dev, Python and tagged , , .