Questão FC331151
Analise o código Python a seguir. class enigma: def __iter__(self): self.x = 128 return self def __next__(self): y = self.x z = lambda a : a - int(a/2) self.x = z(self.x) return y
Linguagens de Programação
FGV · 2023
Analise o código Python a seguir.
class enigma:
def __iter__(self):
self.x = 128
return self
def __next__(self):
y = self.x
z = lambda a : a - int(a/2)
self.x = z(self.x)
return y
coisa = enigma()
xpto = iter(coisa)
for k in range(5):
print(next(xpto))
Assinale o quarto número exibido na execução desse código.
- 4
- 8
- 16
- 32
- 64
Mostrar resposta e comentário
Gabarito
Certo
Comentário do professor
Ao criar o objeto e chamar iter(coisa), o método __iter__ inicializa a variável de estado x com 128. A partir daí o laço chama repetidamente next(xpto), que executa __next__.
No __next__ a ordem é: guarda em y o valor atual de x, atualiza x com a função z e retorna y. A função é \(z(a)=a-\text{int}(a/2)\), ou seja, substitui \(a\) por metade (para pares) ou por \(\lceil a/2\rceil\) no caso geral.
As primeiras impressões são, passo a passo:
1ª: imprime \(y=128\), atualiza \(x=128-\text{int}(128/2)=64\).
2ª: imprime \(y=64\), atualiza \(x=64-\text{int}(64/2)=32\).
3ª: imprime \(y=32\), atualiza \(x=32-\text{int}(32/2)=16\).
4ª: imprime \(y=16\).
Portanto, o quarto número exibido é 16.
Conteúdo do catálogo FC Concursos · Atualizado em