• Python
  • 08. Iterando em coleções com "for"

Indo Além - Loops for#

Agora que já temos alguma experiência com loops for vamos aprimorar nosso uso de loops em geral. Temos duas opções, while e for, que podem fazer essencialmente as mesmas operações de repetição. Porém, em geral uma delas é muito mais fácil de escrever e ler. Iremos adotar as seguintes regras para melhorar a legibilidade e clareza dos nossos programas.

Quando usar while: quando não sabemos quantas vezes o loop irá rodar e isso depende de algo que acontece dentro do loop. Veja alguns exemplos:

  • validar entrada do usuário
  • em um jogo de adivinhação, o usuário tem que acertar o número sorteado
  • executar até que um dado tenha valor maior que 5

Quando usar for: quando já conhecemos antes de começar o loop o número máximo de vezes que ele irá rodar. Alguns exemplos disso são:

  • ler n inteiros do terminal
  • fazer a média de elementos de uma lista
  • calcular o valor de uma fórmula matemática com somatório

Convertendo código while para usar for#

No momento vocês já tem prática em usar loops while e já reconhecem mais facilmente quando usá-lo. Veremos agora como reescrever códigos para usar for nos casos que enumeramos acima.

Um loop com contagem,por exemplo, pode ser escrito com while da maneira abaixo.

i = 0
while i < 10:
    .... # algo aqui

    i += 1

Porém é muito mais rápido e legível escrevê-lo com um for!

for i in range(10):
    .... # algo aqui

O valor 10 pode ser também uma variável e não precisa ser somente um número fixo. A regra geral para usar o for para contagem é usar o range da maneira abaixo:

  • range(valor_inicial, valor_final_mais_um, incremento)

Por exemplo, para contar de 5 até 10 (inclusive) usamos range(5, 10). Se quisermos pular de dois em dois seria range(5, 10, 2).

Também podemos ir de trás para frente: range(10, 1, -1) começa em 10 e vai diminuindo até chegar no 2.

Exercício 1

Qual seria o range correto para o código abaixo?

i = 5
while i < 15:
    ... 

    i += 2

Exercício 2

Qual seria o range correto para o código abaixo?

i = 0
n = int(input())
while i < n:
    ... 

    i += 1

Resposta

A opção range(0, n, 1), apesar de estar funcionalmente correta, é menos desejada que a primeira. O valores padrão para início e incremento são 0 e 1, então podemos passar só o fim em muitas situações.

Exercício 3

Qual é o último valor de i que o loop abaixo executa?

for i in range(1, 7):
    ... # ALGO AQUI

Exercício 4

Qual é o último valor de i que o loop abaixo executa?

for i in range(1, 10, 3):
    ... # ALGO AQUI

Exercício 5

Qual é o último valor de i que o loop abaixo executa?

for i in range(10, 5, -1):
    ... # ALGO AQUI