For Loops

Visão Geral

Perguntas
  • Como eu posso fazer um programa fazer muitas coisas?

Objetivos
  • Explicar para que for loops normalmente são usados.

  • Traçar a execução de um loop simples (não aninhado) e apontar corretamente os valores das variáveis em cada iteração.

  • Escrever for loops que usem o padrão Acumulador para agregar valores.

Um for loop executa comandos uma vez para cada valor em uma coleção.

for numero in [2, 3, 5]:
    print(numero)
print(2)
print(3)
print(5)
2
3
5

Um for loop consiste de uma coleção, uma variável do loop, e um corpo.

for numero in [2, 3, 5]:
    print(numero)

A primeira linha de um for loop deve acabar com dois pontos, e o corpo deve ser indentado.

for numero in [2, 3, 5]:
print(numero)
IndentationError: expected an indented block
primeiro_nome = "Felipe"
  sobrenome = "da Silva"
  File "<ipython-input-7-f65f2962bf9c>", line 2
    sobrenome = "da Silva"
    ^
IndentationError: unexpected indent

Variáveis de loop podem ser chamadas de qualquer coisa.

for pessoa in [2, 3, 5]:
    print(pessoa)

O corpo de um loop pode conter muitos comandos.

primos = [2, 3, 5]
for p in primos:
    quadrado = p ** 2
    cubo = p ** 3
    print(p, quadrado, cubo)
2 4 8
3 9 27
5 25 125

Use range para iterar sobre uma sequência de números.

print('Uma range não é uma lista: range(0, 3)')
for numero in range(0, 3):
    print(numero)
Uma range não é uma lista: range(0, 3)
0
1
2

O padrão Acumulador transforma muitos valores em um.

# Some os 10 primeiros inteiros.
total = 0
for numero in range(10):
   total = total + (numero+ 1)
print(total)
55

Classificando Erros

Indentação é um erro de sintaxe ou um erro de runtime?

Solução

Um IndentationError é um erro de sintaxe. Programas que têm erros de sintaxe não podem ser iniciados. Um programa com um erro de runtime vai iniciar mas o erro vai ocorrer em certas condições.

Traçando Execução

Crie uma tabela mostra os números de cada linha quando esse programa é executado, e os valores das variáveis depois de que cada linha é executada.

total = 0
for char in "rio":
    total = total + 1

Solução

Line no Variables
1 total = 0
2 total = 0 char = ‘r’
3 total = 1 char = ‘r’
2 total = 1 char = ‘i’
3 total = 2 char = ‘i’
2 total = 2 char = ‘o’
3 total = 3 char = ‘o’

Invertendo uma String

Preencha os brancos no programa abaixo para que ele imprima “oir” o inverso da string original “rio”.

original = "rio"
resultado = ____
for letra in original:
    result = ____
print(result)

Solução

original = "rio"
resultado = ""
for letra in original:
    resultado = letra + resultado
print(resultado)

Pratique Acumulação

Preencha os brancos do programas abaixo para produzir o resultado indicado.

# Comprimento total das strings na lista: ["vermelho", "verde", "azul"] => 17
total = 0
for palavra in ["vermelho", "verde", "azul"]:
    ____ = ____ + len(palavra)
print(total)

Solução

total = 0
for palavra in ["vermelho", "verde", "azul"]:
    total = total + len(palavra)
print(total)
# Lista com os comprimentos (lengths) de cada palavra: ["vermelho", "verde", "azul"] => [8, 5, 4]
comprimentos = ____
for palavra in ["vermelho", "verde", "azul"]:
    comprimentos.____(____)
print(comprimentos)

Solução

comprimentos = []
for palavra in ["vermelho", "verde", "azul"]:
    comprimentos.append(len(palavra))
print(comprimentos)
# Concatene (junte) todas as palavras: ["vermelho", "verde", "azul"] => "redgreenblue"
palavras = ["vermelho", "verde", "azul"]
resultado = ____
for ____ in ____:
    ____
print(resultado)

Solução

palavras = ["vermelho", "verde", "azul"]
resultado = ""
for palavra in palavras:
    resultado = resultado + palavra
print(resultado)

Crie um acrônimo: Começando da lista ["vermelho", "verde", "azul"], crie o acrônimo "VVA" usando um for loop.

Dica: Você pode precisar de um método de string para formatar adequadamente o acrônimo.

Solução

acronimo = ""
for palavra in ["vermelho", "verde", "azul"]:
    acronimo = acronimo + palavra[0].upper()
print(acronimo)

Soma Acumulativa

Reordene e indente corretamente as linhas de código abaixo para que imprimam a lista com a soma acumulativa dos dados. O resultado deve ser [1, 3, 5, 10].

acumulativa.append(total)
for numero in dados:
acumulativa = []
total += numero
total = 0
print(acumulativa)
dados = [1,2,2,5]

Solution

total = 0
dados = [1,2,2,5]
acumulativa = []
for numero in dados:
    total += numero
    acumulativa.append(total)
print(acumulativa)

Identificando Nomes em Erros de Variáveis

  1. Leia o código abaixo e tente identificar quais são os erros sem rodá-lo.
  2. Rode o código e leia a mensagem de erro. Que tipo de NameError você acha que é esse? É uma string sem aspas, uma variável escrita errada, ou uma variável que deria ser definida mas não foi?
  3. Conserte o erro.
  4. Repita os passos 2 e 3, até consertar todos os erros.
for numero in range(10):
    # use a if the numero is a multiple of 3, otherwise use b
    if (Numero % 3) == 0:
        mensagem = mensagem + a
    else:
        mensagem = mensagem + "b"
print(mensagem)

Solução

  • Nomes de variável do Python são case-sensitive: numero e Numero se referem a variáveis distintas.
  • A variável mensagem mensagem precisa ser inicializada com uma string vazia.
  • Queremos adicionar uma string "a" para mensagem, não uma variável indefinida a.
mensagem = ""
for numero in range(10):
    # use a if the numero is a multiple of 3, otherwise use b
    if (numero % 3) == 0:
        mensagem = mensagem + "a"
    else:
        mensagem = mensagem + "b"
print(mensagem)

Identificando Erros de Itens

  1. Leia o código abaixo e tente identificar o que são os erros sem rodá-lo.
  2. Rode o código, e leia a mensagem de erro. Que tipo de erro é esse?
  3. Conserte o erro.
estacoes = ['Primavera', 'Verão', 'Outono', 'Inverno']
print('Minha estação favorita é', estacoes[4])

Solução

Essa lista tem 4 elementos e o index para acessar o último elemento da lista é 3.

estacoes = ['Primavera', 'Verão', 'Outono', 'Inverno']
print('Minha estação favorita é', estacoes[3])

Pontos-chave

  • Um for loop executa comandos uma vez para cada valor em uma coleção.

  • Um for loop consiste de uma coleção, uma variável do loop, e um corpo.

  • A primeira linha de um for loop deve acabar com dois pontos, e o corpo deve ser indentado.

  • Indentação é sempre importante no Python.

  • Variáveis de loop podem ser chamadas de qualquer coisa (mas é fortemente recomendado de que seja usado um nome informativo).

  • O corpo de um loop pode conter muitos comandos.

  • Use range para iterar sobre uma sequência de números.

  • O padrão Acumulador transforma muitos valores em um.