Sintaxe de loops no Python
Overview
Olá, entusiastas da programação! Neste post vibrante, vamos desbravar juntos o mundo dos loops no Python. De maneira simples e direta, abordaremos os conceitos fundamentais dos loops While e For, além de explorar funções poderosas como range e zip. Seja para iterar sobre strings, listas, ou até mesmo dicionários, este guia tem tudo que você precisa para elevar seu código a um novo nível. Preparado para tornar seus scripts mais eficientes e suas linhas de código mais elegantes? Vamos nessa!
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.