FC ConcursosFC Concursos

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.

  1. 4
  2. 8
  3. 16
  4. 32
  5. 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

Continue aprendendo