Analise o código Python a seguir.class enigma: def __ite...
Assinale o quarto número exibido na execução desse código.
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Gabarito: C
Fundamento decisivo: O decisivo é a ordem em __next__: y recebe o valor atual de self.x, depois self.x é atualizado por z(self.x), e só então y é retornado. Como __iter__ fixa self.x = 128 e, nesta execução, z(a) leva os valores a 64, 32, 16 e 8, o quarto valor exibido é 16.
- Em código com __iter__ e __next__, identifique separadamente o valor inicial do estado interno e o que é efetivamente retornado em cada chamada.
- Verifique a ordem exata dentro de __next__: capturar valor, atualizar estado e retornar não são etapas equivalentes.
- Monte a sequência das saídas impressas, não apenas a sequência dos estados internos após atualização.
- Quando a pergunta pedir posição ordinal, conte as impressões uma a uma antes de marcar a alternativa.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
O código define uma classe que implementa os métodos e necessários para que um objeto da classe possa ser usado como iterador. Quando um objeto da classe é criado e seu método é chamado, ele inicializa a variável com o valor 128 e retorna .
O método é responsável por retornar o próximo elemento da sequência. Ele armazena o valor atual de na variável , calcula o próximo valor de aplicando uma função lambda que subtrai a metade do valor de do próprio valor, e então retorna o valor de .
No loop , um objeto iterador é criado a partir de um objeto e é chamado o método do iterador para imprimir os próximos valores da sequência. Como o loop é executado 5 vezes, serão impressos os primeiros 5 valores da sequência.
Os primeiros quatro valores da sequência serão 128, 64, 32 e 16, respectivamente. Portanto, o quarto número exibido na execução do código será 16.
Como resolver questões de Python sem identação?
Essa questão precisa de formatação. Para ajudar na compreensão:
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))
Os números exibidos são:
128
64
32
16
8
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))
1ª iteração
self.x = 128 / 2 = 64
retorna y=128
2ª iteração
self.x = 64 / 2 = 32
retorna y=64
3ª iteração
self.x = 32 / 2 = 16
retorna y=32
4ª iteração
self.x = 16 / 2 = 8
retorna y=16
5ª iteração
self.x = 8 / 2 = 4
retorna y=8
O quarto item que será impresso é 16.
A prova com indentação está nesse link:
https://arquivos.qconcursos.com/prova/arquivo_prova/92309/fgv-2023-receita-federal-auditor-fiscal-manha-prova.pdf?_ga=2.241499850.977960604.1700742582-2048531100.1700742582
Questão 78
Resolvendo a questão:
para k=1
y <- x = 128
z = 128/2 = 64
x <- z = 64
return y
apresenta na tela o valor de Y (128)
para k=2
y <- x = 64
z = 64/2 = 32
x <- z = 32
return y
apresenta na tela o valor de Y (64)
para k=3
y <- x = 32
z = 32/2 = 16
x <- z = 16
return y
apresenta na tela o valor de Y (32)
para k=4
y <- x = 16
z = 16/2 = 8
x <- z = 8
return y
apresenta na tela o valor de Y (16)
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo