Questão FC331171
Analise o código Python a seguir. class xptoClass: def __iter__(self): self.a = [0] return self def __next__(self): self.a.append( \ self.a[-1] \ + self.a[-2] if len(self.a) > 1 el
Linguagens de Programação
FGV · 2022
Analise o código Python a seguir.
class xptoClass:
def __iter__(self):
self.a = [0]
return self
def __next__(self):
self.a.append( \
self.a[-1] \
+ self.a[-2] if len(self.a) > 1 else 1)
return self.a
xpto = xptoClass()
xptoIter = iter(xpto)
for k in range(1,6):
print(next(xptoIter))
No resultado produzido pela execução do código acima, a quinta linha contém exatamente:
- [0, 1, 1, 2, 2, 3]
- [0, 1, 1, 2, 3, 5]
- [0, 1, 2, 3, 4, 5]
- [0, 1, 3, 5, 7, 9]
- [1, 2, 3, 4, 5, 6]
Mostrar resposta e comentário
Gabarito
B
Comentário do professor
O código cria um iterador: em __iter__ a lista é inicializada como self.a = [0]. Em __next__ há um append que insere 1 quando a lista tem tamanho 1, caso contrário soma os dois últimos elementos (self.a[-1] + self.a[-2]), ou seja, segue a regra de Fibonacci \(a_n = a_{n-1}+a_{n-2}\).
No laço for k in range(1,6) são chamados cinco next, produzindo sucessivamente as listas:
[0, 1]
[0, 1, 1]
[0, 1, 1, 2]
[0, 1, 1, 2, 3]
[0, 1, 1, 2, 3, 5]
Cada chamada acrescenta um elemento seguindo a soma dos dois últimos; portanto a quinta linha exibida é exatamente [0, 1, 1, 2, 3, 5].
Conteúdo do catálogo FC Concursos · Atualizado em