← Questões de Programação

Programação · FGV · 2022

Questão comentada de Programação

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:

Gabarito: B

Em Python, um objeto iteravel precisa implementar __iter__ e o iterador precisa fornecer __next__. Aqui, o metodo __iter__ cria a lista inicial [0] e devolve o proprio objeto, que passa a funcionar como iterador. Depois, cada chamada de next(xptoIter) executa __next__, que vai acrescentando um novo elemento na lista com base nos dois ultimos valores, exatamente no estilo da sequencia de Fibonacci. O detalhe importante e que o metodo retorna a propria lista atualizada, e nao o ultimo numero gerado. Por isso, o print mostra a lista crescendo a cada linha. Na primeira chamada, a lista vai de [0] para [0, 1]. Na segunda, vira [0, 1, 1]. Depois, [0, 1, 1, 2], depois [0, 1, 1, 2, 3] e, na quinta linha, [0, 1, 1, 2, 3, 5]. E por isso o gabarito e a alternativa B. O algoritmo monta a sequencia de Fibonacci, so que exibindo a lista inteira a cada passo, como se dissesse: "olha como eu cresco bonitinho".

Continue treinando

Questões relacionadas