Loops e Estruturas de Repetição no Python

Curso de Python

Salve salve Pythonista!

Nesse post vamos falar sobre as famosas Estruturas de Repetição (ou loops) do Python: for, while, for com else, for com range() e muito mais!

Vamos ver também sobre as funções range() e enumerate() e como construir loops com elas!

Loops ou estruturas de repetição são blocos básicos de qualquer linguagem de programação e são muito importantes!

Cada linguagem de programação possui uma sintaxe específica para loops.

Vamos ver nesse post como podemos fazer loops em Python, pois isso é muito importante no dia a dia do verdadeiro Pythonista!

Então… Bora pro post! :rocket:

Vá Direto ao Assunto…

Introdução

As estruturas de repetição são recursos das linguagens de programação responsáveis por executar um bloco de código repetidamente através de determinadas condições especificas.

O Python contém dois tipos de estruturas de repetição: for e while.

Vamos ver ambos nesse post!

Loops utilizando for

Vamos iniciar pelos detalhes das estruturas de repetição, ou melhor dizendo, os loops utilizando o for.

O for é utilizado para percorrer ou iterar sobre uma sequência de dados (seja esse uma lista, uma tupla, uma string), executando um conjunto de instruções em cada item.

Como você já sabe, o Python utiliza identação para separar blocos de código: nos loops utilizando for não é diferente.

Sua sintaxe básica é: for <nome variável> in <iterável>. Vamos entender:

  • <nome variável> é o nome da variável que vai receber os elemento de <iterável>.
  • <iterável> é o container de dados sobre o qual vamos iterar, podendo ser: uma lista, uma tupla, uma string, um dicionário, entre outros.

Vamos ver um exemplo, para facilitar nossa vida!

1
2
3
4
lista = [1, 2, 3, 4, 5]

for item in lista:
    print(item)

Vamos entender passo a passo:

  • Na primeira iteração, item vai receber o valor do primeiro elemento da lista lista, que é 1. Portanto print(item) vai mostrar o valor 1.
  • Na segunda iteração, item vai receber o valor do segundo elemento da lista lista, que é 2. Portanto print(item) vai mostrar o valor 2.
  • E assim por diante até o último valor, que é 5 (você já entendeu :laughing:)

Existe outra forma de se utilizar o for que é utilizando a estrutura for/else.

Adicionar o else ao final do for nos possibilita executar um bloco de código após o iterável ter sido completamente percorrido.

Vamos ao exemplo! :point_down:

1
2
3
4
for item in sequencia:
    print(item)
else:
    print('Todos os items foram exibidos com sucesso')

Exemplos de loops com for

Agora vamos ver alguns exemplo de como podemos percorrer tipos de dados diferentes utilizando o for.

Para iterar sobre Listas e imprimir cada item da lista:

1
2
3
4
computador = ['Processador', 'Teclado', 'Mouse']

for item in computador:
    print(item)

A saída será:

1
2
3
Processador
Teclado
Mouse

:point_right: Quer saber TUDO sobre Listas e DOMINAR essa estrutura de dado tão importante do Python? Então já clica aqui e deixa esse post completo sobre Listas na espera!

Podemos também percorrer os dicionários do Python (que são uma estrutura de dados muito importante).

Para isso, podemos fazer da seguinte maneira:

1
2
3
4
5
6
7
8
9
notas = {
    'Potuguês': 7, 
    'Matemática': 9, 
    'Lógica': 7, 
    'Algoritmo': 7
}

for chave, valor in notas.items():
    print(f"{chave}: {valor}")

O resultado será:

1
2
3
4
Potuguês: 7
Matemática: 9
Lógica: 7
Algoritmo: 7

:point_right: Quer ficar craque TAMBÉM em Dicionários e saber TUDO? Então também deixa de lado esse post completo sobre os Dicionários do Python

Também podemos percorrer strings, pois elas também são um tipo iterável:

1
2
for caractere in 'Python':
    print(caractere)

O Python vai dividir a string 'Python' nos caracteres que a compoem e o resultado do loop for será o seguinte:

1
2
3
4
5
6
P
y
t
h
o
n

Lá vem você dizer que tem um post sobre String, não é? :roll_eyes:

Calma :laughing: A Python Academy AINDA não tem um post sobre Strings, mas ele já está sendo produzido! Quer ser notificado quando ele sair e ficar por dentro de todas as novidades aqui da Python Academy? Então aproveita a oportunidade e se inscreva aqui! :point_down:

Loops utilizando while

O while é uma estrutura de repetição utilizada quando queremos que determinado bloco de código seja executado ENQUANTO (do inglês while) determinada condição for satisfeita.

Em outras palavras: só saia da estrutura de repetição quando a condição não for mais satisfeita.

Sua sintaxe básica é:

1
2
while <condição>:
    # Bloco aser executado

Aqui, <condição> é uma expressão que pode ser reduzida à True ou False, podendo ser:

  • A verificação do valor de uma variável;
  • Determinada estrutura de dados alcançar um tamanho;
  • O retorno de uma função se igualar a determinado valor;
  • Algum valor externo ser alterado (por exemplo um valor armazenado em Banco de Dados).

Vamos entender melhor com um exemplo:

1
2
3
4
5
contador = 0

while contador < 10:
    print(f'Valor do contador é {contador}')
    contador += 1

Não entendeu essa notação no print print(f'Valor do contador é {contador}')? Essas são as chamadas f-strings e são formas muito Pythônicas de se formatar strings no Python! Quer saber mais, então adivinha… Claro que sim! Clique aqui para acessar nosso post completo sobre f-strings. :wink:

Resultando em:

1
2
3
4
5
6
7
8
9
10
Valor do contador é 1
Valor do contador é 2
Valor do contador é 3
Valor do contador é 4
Valor do contador é 5
Valor do contador é 6
Valor do contador é 7
Valor do contador é 8
Valor do contador é 9
Valor do contador é 10

Ou seja, a variável contador está sendo incrementada a cada vez que o while executa seu código.

Quando ele alcançar o valor 10, a condição contador < 10 não será mais satisfeita, finalizando o bloco while!

Assim como no for, podemos utilizar o else também nos loops while.

Vamos usar o mesmo código do exemplo acima para você entender a diferença:

1
2
3
4
5
6
7
contador = 0

while contador < 10:
    contador += 1
    print(f'Valor do contador é {contador}')    
else:
    print(f'Fim do while e o valor do contador é {contador}')

O que resultará em:

1
2
3
4
5
6
7
8
9
10
11
Valor do contador é 1
Valor do contador é 2
Valor do contador é 3
Valor do contador é 4
Valor do contador é 5
Valor do contador é 6
Valor do contador é 7
Valor do contador é 8
Valor do contador é 9
Valor do contador é 10
Fim do while e o valor do contador é 10

Se chegou até aqui é por que tá curtindo! Que tal ser avisado EM PRIMEIRA MÃO quando novos conteúdo forem postado por aqui? Aproveita e cadastra seu melhor email aqui! :point_down:

Auxiliadores

Existem 3 comandos que nos auxiliam quando queremos alterar o fluxo de uma estrutura de repetição.

São eles: break, continue e pass.

Esses auxiliares não funcionam diretamente com o while, e por isso encaixar eles no bloco principal do while pode ser tanto quanto inútil, já que a condição especificada encerra o loop.

Auxiliador break

É usado para finalizar um loop, isto é, é usado para parar sua execução.

Geralmente vem acompanhado de alguma condição para isso, com um if.

Veja um exemplo:

1
2
3
4
5
6
7
for num in range(10):
    # Se o número for igual a = 5, devemos parar o loop
    if num == 5:
        # Break faz o loop finalizar
        break
    else:
        print(num)

Saída do código acima:

1
2
3
4
5
0
1
2
3
4

Percebeu que o loop não chegou ao final?! Para isso utilizamos o break! :wink:

Já com while, também podemos utilizar o break em uma condição utilizando if, assim:

1
2
3
4
5
6
7
8
num = 0
while num < 5:
    num += 1

    if num == 3:
        break
        
    print(num)

Quando a variável atribuir o valor 4 o laço é finalizado pelo break, encerrando o loop. Resultando em:

1
2
3
1
2
3

Auxiliador continue

Funciona de maneira similar ao break, contudo ao invés de encerrar o loop ele pula todo código que estiver abaixo dele (dentro do loop) partindo para a próxima iteração.

Vamos ao exemplo:

1
2
3
4
5
6
7
8
9
for num in range(5):
    if num == 3:
        print("Encontrei o 3")
        # Executa o continue, pulando para o próximo laço
        continue
    else:
        print(num)

    print("Estou abaixo do IF")

Repare na saída abaixo. Repare que quando a condição num == 3 for satisfeita, a string "Estou abaixo do IF" não será exibida:

1
2
3
4
5
6
7
8
9
0
Estou abaixo do IF
1
Estou abaixo do IF
2
Estou abaixo do IF
Encontrei o 3
4
Execução normal

Em loops com while a lógica é a mesma. O continue irá finalizar o loop atual, iniciando novamente no início do while.

Veja o exemplo:

1
2
3
4
5
6
7
8
num = 0
while num < 5:
    num += 1

    if num == 3:
        continue
        
    print(num)

O resultado desse código é que o 3 não apareça, pois o print() que imprime os números está abaixo do continue.

Portanto a saída será:

1
2
3
4
1
2
4
5

Auxiliador pass

O pass nada mais é que uma forma de fazer um código que não realiza operação nenhuma.

Tipo o Magikarp do Pokemon :laughing: :laughing: :laughing:

Mas calma, ele tem uma razão de existir no Python!

Como os escopos de Classes, Funções, If/Else e loops for/while são definidos pela indentação do código (e não por chaves {} como geralmente se vê em outras linguagens de programação), usamos o pass para dizer ao Python que o bloco de código está vazio.

Veja alguns exemplos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
for item in range(5000):
    pass

while False:
    pass

class Classe:
    pass

if True:
    pass
else:
    pass

def funcao():
    pass

Caso não utilizemos o pass, veja o que acontece:

1
2
3
4
class Classe:

def funcao():
    pass
1
2
3
4
  File "<stdin>", line 2
    
    ^
IndentationError: expected an indented block

Isso acontece pois o Python entende que as próximas linhas de código fazem parte do mesmo escopo, mas como não estão indentadas um erro IndentationError é lançado.

A função range()

A função range é de grande ajuda quando o tema é repetição, laços, for etc…

Ela gera uma sequência de números pela qual podemos iterar!

Com ela, conseguimos especificar:

  • O inicio de uma sequência;
  • O passo (ou pulo); e
  • O valor final da sequência.

Com isso o Python nos entrega uma sequência de números para utilizarmos!

De tão importante que é, temos um post COMPLETO sobre essa função tão importante na vida do verdadeiro Pythonista!

Então já clica aqui e acessa nosso post sobre a função range agora mesmo!

Funcão enumerate()

Uma dica bem bacana para se usar com o for, é a função enumerate().

Ela nos entrega um contador embutido no próprio for! :heart_eyes:

Ao invés de fazer isso:

1
2
3
4
5
6
contador = 0
computador = ['Processador', 'Teclado', 'Mouse']

for elemento in computador:
    print(f"Índice={contador} | Valor={elemento}")
    contador += 1

Jogue esse contador fora e faça isso:

1
2
3
computador = ['Processador', 'Teclado', 'Mouse']
for indice, valor in enumerate(computador):
    print(f"Índice={indice} | Valor={valor}")

Saída:

1
2
3
Índice=0 | Valor=Processador
Índice=1 | Valor=Teclado
Índice=2 | Valor=Mouse

Esse código é o que chamamos de Pythônico (que segue as melhores práticas da linguagem)! :wink:

Outra maneira de iterar sobre os índices, é combinar as funções range() e len().

A função len() retorna o tamanho de um iterável (lista, tupla, set).

Podemos combiná-los da seguinte forma:

1
2
3
computador = ['Processador', 'Teclado', 'Mouse']
for indice in range(len(computador)):
    print(f"Índice={indice} | valor={computador[indice]}")

Observe como obteve o mesmo resultado com sua saída:

1
2
3
Índice=0 | Valor=Processador
Índice=1 | Valor=Teclado
Índice=2 | Valor=Mouse

Conclusão

Nesse post vimos um dos pilares da programação Python: as estuturas de repetição com for e while!

Aprendê-los bem é básico para todos desenvolvedor Python.

Se ficou com alguma dúvida, fique à vontade para deixar um comentário no box aqui embaixo! Será um prazer te responder! :wink:

Se gostou desse conteúdo, que tal fazer um CURSO COMPLETO de Python com Certificado Profissional, suporte individual e personalizado e 7 dias de garantia? :point_down:

Curso de Python

Gostou do conteúdo? Compartilha aí!