FC ConcursosFC Concursos

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:

  1. [0, 1, 1, 2, 2, 3]
  2. [0, 1, 1, 2, 3, 5]
  3. [0, 1, 2, 3, 4, 5]
  4. [0, 1, 3, 5, 7, 9]
  5. [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

Continue aprendendo