FC ConcursosFC Concursos

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:

  1. 6, 1
  2. 5, 3, 1
  3. 6, 4, 2
  4. 1, 3, 5
  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

Continue aprendendo