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.
- Fazer operações nos valores de uma lista um por um
é tão doloroso quanto trabalhar com
consumo_001,consumo_002, etc. - Um for loop diz ao Python para executar alguns comandos uma vez para cada valor em uma lista, string de caracteres, ou alguma outra coleção.
- “para cada coisa nesse grupo, faça essas operações”
for numero in [2, 3, 5]:
print(numero)
- Esse
for loopé equivalente a:
print(2)
print(3)
print(5)
- E a saída do
for loopé:
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 coleção,
[2, 3, 5], é a coisa sobre a qual o loop está sendo rodado. - O corpo,
print(numero), especifica o que fazer para cada valor na coleção. - O variável do loop,
numero, é o que muda em cada iteração do loop.- A “coisa atual”.
A primeira linha de um for loop deve acabar com dois pontos, e o corpo deve ser indentado.
- Os dois pontos no final da primeira linha indica o início de um bloco de comandos (statements).
- Python usa indentação invés de
{}oubegin/endpara mostrar aninhamento (nesting).- Qualquer indentação constante pode ser usada, mas normalmente utilizamos quatro espaços.
for numero in [2, 3, 5]:
print(numero)
IndentationError: expected an indented block
- Indentação é sempre importante no Python.
primeiro_nome = "Felipe"
sobrenome = "da Silva"
File "<ipython-input-7-f65f2962bf9c>", line 2
sobrenome = "da Silva"
^
IndentationError: unexpected indent
- Esse erro pode ser consertado ao remover o espaço extra no começo da segunda linha.
Variáveis de loop podem ser chamadas de qualquer coisa.
- Assim como todas as variáveis, variáveis de loop são:
- Criadas por demanda.
- Sem significado: os seus nomes podem ser qualquer coisa
for pessoa in [2, 3, 5]:
print(pessoa)
O corpo de um loop pode conter muitos comandos.
- Mas nenhum loop deve ter muito mais do que algumas linhas.
- É difícil para seres humanos manterem grandes pedaços de código em mente.
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.
- A função embutida
rangeproduz uma sequência de números.- Não é uma lista: os números são produzidos sob demanda para tornar o loop de grandes ranges mais eficiente.
range(N)são os números0 ... N-1.- Exatamente os mesmos índices de uma lista ou string de tamanho
N.
- Exatamente os mesmos índices de uma lista ou string de tamanho
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.
- Uma padrão comum em programas é:
- Inicializar uma variável acumuladora como zero, uma string vazia, uma lista vazia.
- Fazer update da variável com valores de uma coleção.
# Some os 10 primeiros inteiros.
total = 0
for numero in range(10):
total = total + (numero+ 1)
print(total)
55
- Leia
total = total + (numero + 1)como:- Some 1 ao valor atual da variável
numero. - Some isso ao valor atual da variável acumuladora
total. - Assinalar isso à
total, substituindo o valor atual.
- Some 1 ao valor atual da variável
- Temos que botar
numero + 1porquerangeproduz0..9, e não1..10.
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 + 1Soluçã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
- Leia o código abaixo e tente identificar quais são os erros sem rodá-lo.
- Rode o código e leia a mensagem de erro. Que tipo de
NameErrorvocê acha que é esse? É uma string sem aspas, uma variável escrita errada, ou uma variável que deria ser definida mas não foi?- Conserte o erro.
- 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:
numeroeNumerose referem a variáveis distintas.- A variável mensagem
mensagemprecisa ser inicializada com uma string vazia.- Queremos adicionar uma string
"a"paramensagem, não uma variável indefinidaa.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
- Leia o código abaixo e tente identificar o que são os erros sem rodá-lo.
- Rode o código, e leia a mensagem de erro. Que tipo de erro é esse?
- 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
rangepara iterar sobre uma sequência de números.O padrão Acumulador transforma muitos valores em um.