Questão FC331159
Considere o código Python a seguir. def xpto(S): for k in range(0,len(S)): if k%2 == 0: yield(S[k]); S=[1,2,3,4,5,6] for x in xpto(S[::-1]): print (x) A execução desse código na ID
Linguagens de Programação
FGV · 2022
Considere o código Python a seguir.
def xpto(S):
for k in range(0,len(S)):
if k%2 == 0:
yield(S[k]);
S=[1,2,3,4,5,6]
for x in xpto(S[::-1]):
print (x)
A execução desse código na IDLE Shell produz, na ordem e exclusivamente, os números:
- 6, 1
- 5, 3, 1
- 6, 4, 2
- 1, 3, 5
- 2, 4, 6
Mostrar resposta e comentário
Gabarito
Certo
Comentário do professor
A função xpto recebe a lista S e percorre cada posição k com for. Dentro do laço há a condição k%2 == 0, que seleciona apenas os elementos em índices pares.
O uso de yield transforma xpto em um generator: em vez de retornar uma lista, ela produz valores um a um na ordem de execução.
A lista dada é S = [1,2,3,4,5,6]. O fatiamento S[::-1] gera a lista invertida [6,5,4,3,2,1].
Aplicando a regra dos índices pares sobre a lista invertida, consideramos as posições 0, 2 e 4 da nova lista, que contêm 6, 4 e 2, respectivamente.
Como o gerador emite esses valores nessa sequência e o laço for os imprime, a saída exibida é: 6, 4, 2.
Conteúdo do catálogo FC Concursos · Atualizado em