Computadores são muito eficientes em realizar tarefas bem definidas e repetitivas. E muito menos suscetíveis a cometer erros de cálculo do que nós humanos. Nesta aula vamos aprender a inserir automação em nossos programas utilizando estruturas de repetição. Loops (em português "laços de repetição") são estruturas que garantem que uma parte do código seja repetida várias vezes. Existem dois tipos fundamentais de loops: (i) *for* loops e (ii) *while* loops. Por simplicidade, veremos apenas o primeiro tipo neste curso.
Após esta aula você deverá ser capaz de:
No jargão da computação, chamamos de loop uma estrutura contendo código que será executado múltiplas vezes. Cada repetição do loop é chamada iteração.
A estrutura de um loop do tipo "for" é composta por:
i
ou j
, mas poderia ser qualquer outro nome, como por exemplo dinossauro
);Para exemplificar, vamos construir uma estrutura que imprima no console a frase "nova iteração" algumas vezes.
print("Antes do loop...")
for i in range(10):
print("Nova iteração")
print("Depois do loop")
Antes do loop... Nova iteração Nova iteração Nova iteração Nova iteração Nova iteração Nova iteração Nova iteração Nova iteração Nova iteração Nova iteração Depois do loop
Uma característica da variável de iteração é que ela, a cada iteração, assumirá o valor seguinte na lista percorrida. Podemos então imprimir no console o número de cada nova iteração.
print("Antes do loop...")
for i in range(10):
print("Iteração",i)
print("Depois do loop")
Antes do loop... Iteração 0 Iteração 1 Iteração 2 Iteração 3 Iteração 4 Iteração 5 Iteração 6 Iteração 7 Iteração 8 Iteração 9 Depois do loop
Podemos também percorrer listas com elementos não-numéricos por meio de loops.
minhaLista = ["Olá", "Dinossauro", True, False, ["a", "b", "c"], 42.5 ]
for el in minhaLista: # neste caso a variável `el` é a variável de iteração
print("Nova iteração: elemento", el)
Nova iteração: elemento Olá Nova iteração: elemento Dinossauro Nova iteração: elemento True Nova iteração: elemento False Nova iteração: elemento ['a', 'b', 'c'] Nova iteração: elemento 42.5
Variáveis contadoras (normalmente chamadas ctr
) podem ser usadas para armazenar resultados de forma gradativa durante as iterações. Elas são usualmente inicializadas com valor zero e, a cada iteração, são atualizadas (normalmente somando-se 1).
Usando variáveis contadoras podemos, por exemplo, calcular a soma de números em uma lista.
minhaLista = [ 1,2,3,4,5,6,7,8,9,10 ]
ctr = 0
print("Antes do loop")
print("Valor inicial de ctr:", ctr)
print("")
for i in minhaLista:
print("Dentro do loop: nova iteração")
print("Valor anterior de ctr:",ctr)
print("Somando", i)
ctr = ctr + i # é assim que atualizamos o valor de uma variável usando como base seu valor antigo
print("Novo valor de ctr:",ctr)
print("")
print("Fora do loop")
print("Valor final de ctr:", ctr)
Antes do loop Valor inicial de ctr: 0 Dentro do loop: nova iteração Valor anterior de ctr: 0 Somando 1 Novo valor de ctr: 1 Dentro do loop: nova iteração Valor anterior de ctr: 1 Somando 2 Novo valor de ctr: 3 Dentro do loop: nova iteração Valor anterior de ctr: 3 Somando 3 Novo valor de ctr: 6 Dentro do loop: nova iteração Valor anterior de ctr: 6 Somando 4 Novo valor de ctr: 10 Dentro do loop: nova iteração Valor anterior de ctr: 10 Somando 5 Novo valor de ctr: 15 Dentro do loop: nova iteração Valor anterior de ctr: 15 Somando 6 Novo valor de ctr: 21 Dentro do loop: nova iteração Valor anterior de ctr: 21 Somando 7 Novo valor de ctr: 28 Dentro do loop: nova iteração Valor anterior de ctr: 28 Somando 8 Novo valor de ctr: 36 Dentro do loop: nova iteração Valor anterior de ctr: 36 Somando 9 Novo valor de ctr: 45 Dentro do loop: nova iteração Valor anterior de ctr: 45 Somando 10 Novo valor de ctr: 55 Fora do loop Valor final de ctr: 55
Podemos também usar loops para percorrer strings, como se fossem uma lista de caracteres.
meuNome = "Luke Skywalker"
for caractere in meuNome: # neste caso a variável `caractere` é a variável de iteração
print("Nova iteração: caractere", caractere)
Nova iteração: caractere L Nova iteração: caractere u Nova iteração: caractere k Nova iteração: caractere e Nova iteração: caractere Nova iteração: caractere S Nova iteração: caractere k Nova iteração: caractere y Nova iteração: caractere w Nova iteração: caractere a Nova iteração: caractere l Nova iteração: caractere k Nova iteração: caractere e Nova iteração: caractere r
Ex 1. Escreva a função conta_sup
que recebe: uma lista l
contendo valores numéricos; e um número limite
. A função deve contar quantos elementos na lista l
têm valor maior ou igual a limite
.
def conta_sup(l, limite):
ctr=0
for i in l:
if i >= limite:
ctr = ctr + 1
return ctr
minhaLista = [42, 52,6,30,42,68,28,48,2,100,29,172,0,-1,-50]
# Existem 2 elementos com valor maior ou igual a 100 na lista
conta_sup(minhaLista, 100)
2
Ex 2. Escreva a função busca_max
que recebe uma lista l
contendo valores numéricos e retorna o valor máximo encontrado nela. O comportamento dessa função é equivalente ao da função max
. No entanto, não use a função max
neste exercício.
def busca_max(l):
elem_max = l[0] # a princípio assumiremos que o primeiro elemento da lista é o máximo
# agora no loop vamos atualizar o valor em `elem_max` sempre que encontrarmos algum com valor maior
for el in l:
if el > elem_max:
elem_max = el
return elem_max
minhaLista = [42, 52,6,30,42,68,28,48,2,100,29,172,0,-1,-50]
# O elemento de valor máximo na lista é o 172
busca_max(minhaLista)
172
Ex 3. Escreva uma função busca_primeiro_sup
que recebe: uma lista l
contendo valores numéricos; e um número limite
. A função deve retornar imediatamente assim que encontrar um elemento na lista l
com valor maior que limite
. Caso encontre um valor maior que o limtie, este valor deve ser retornado como resultado. Caso contrário, a função deve retornar uma string "Não encontrado"
.
def busca_primeiro_sup(l, limite):
for el in l:
if el > limite:
return el
return "Não encontrado"
minhaLista = [42, 52,6,30,42,68,28,48,2,100,29,172,0,-1,-50]
busca_primeiro_sup(minhaLista, 100)
172
busca_primeiro_sup(minhaLista,200)
'Não encontrado'
Ex 4. Escreva uma função complementaBases
que recebe como input uma sequência de bases de um fragmento de DNA e retorna as bases complementares.
def complementaBases(dna):
complemento = ""
for base in dna:
if base=="A":
complemento = complemento + "T"
elif base=="T":
complemento = complemento + "A"
elif base=="G":
complemento = complemento + "C"
elif base=="C":
complemento = complemento + "G"
return complemento
complementaBases("GATTACA")
'CTAATGT'