Analise o código Python 2.7 a seguir. L1=[ ] L2=[1,2,3,4] ...

Próximas questões
Com base no mesmo assunto
Q914434 Programação

Analise o código Python 2.7 a seguir.


L1=[ ]

L2=[1,2,3,4]

for k in range(3, -4,-1):

    L1.append(L2[k])

for x in L:

    print x


Esse programa causa

Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Gabarito: B

Fundamento decisivo: O critério decisivo é distinguir erro de sintaxe de erro de execução: o código é sintaticamente válido em Python 2.7, mas no trecho "for x in L:" aparece um identificador não definido, pois o programa declarou "L1" e "L2", não "L"; por isso a falha ocorre em tempo de execução, o que conduz ao gabarito B.

Tema central: erro por variável não definida
Análise das alternativas
A
Errada
Incorreta. Não há violação da gramática da linguagem no código apresentado. Em Python 2.7, inclusive, a forma "print x" é sintaticamente válida. O defeito é usar "L" sem definição prévia, o que é falha em tempo de execução, não erro de sintaxe.
B
Certa
A alternativa B está correta porque a falha do programa ocorre quando o segundo laço tenta iterar sobre "L". Esse nome não foi definido previamente. Antes disso, o primeiro laço é executável: "range(3, -4, -1)" gera 3, 2, 1, 0, -1, -2, -3, e esses índices são válidos para "L2" em Python por causa da indexação negativa. Portanto, o problema não está na montagem de "L1", mas na referência a um nome inexistente no laço seguinte, caracterizando erro de execução.
C
Errada
Incorreta. A sequência 4, 3, 2, 1, 4, 3, 2 corresponde ao conteúdo que seria formado em "L1" após o primeiro laço, porque os acessos "L2[3]", "L2[2]", "L2[1]", "L2[0]", "L2[-1]", "L2[-2]" e "L2[-3]" são válidos. Porém essa sequência não é exibida, porque o laço de impressão usa "L", e não "L1", causando erro antes de qualquer impressão.
D
Errada
Incorreta. Não existe no código nenhum fundamento para exibir apenas o valor 4. O primeiro laço acumula vários valores em "L1", e o segundo laço não percorre uma estrutura válida, pois tenta iterar sobre "L" não definida. Assim, não há impressão de um único elemento.
E
Errada
Incorreta. Essa alternativa erra em dois pontos técnicos. Primeiro, desconsidera a indexação negativa válida em Python, de modo que o primeiro laço não formaria apenas 4, 3, 2, 1, mas também 4, 3, 2 pelos índices -1, -2 e -3. Segundo, mesmo esse conteúdo não chega a ser impresso, porque o código usa "for x in L:", com variável inexistente.
Pegadinha da questão
A banca explora a troca sutil entre "L1" e "L" no segundo laço e, ao mesmo tempo, testa se o candidato sabe que índices negativos em listas Python são válidos.
Dica para questões semelhantes
  • Verifique se o nome usado no laço ou no comando final é exatamente o mesmo que foi definido antes; uma troca mínima de identificador pode mudar toda a resposta.
  • Separe a análise em duas etapas: primeiro confirme se o código é sintaticamente válido; depois identifique se a falha ocorre apenas durante a execução.
  • Em Python, confira sempre se há indexação negativa válida antes de concluir que houve acesso fora da faixa.

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

SyntaxError: multiple statements found while compiling a single statement

Para dar a resposta C conforme gabarito o código deveria ser:

 

L1=[]

L2=[1,2,3,4]

for k in range(3, -4,-1):

    L1.append(L2[k])

for x in L1:

    print(x)

O código correto seria:

L1=[]

L2=[1,2,3,4]

for k in range(3, -4,-1):

  L1.append(L2[k])

for x in L1:

  print (x)


Sendo o retornado pelo primeiro FOR de 3 até -4, exceto o -4, voltando de um a um (-1): L2[3]: 4, L2[2]:3, L2[1]:2, L2[0]:1, L2[-1]:4, L2[-2]:3 e L2[-3]:2


Logo a lista L1 fica: L1[4, 3, 2, 1, 4, 3, 2]


Portanto ao exibir os valores de L1 no segundo FOR em x a resposta é: 4, 3, 2, 1, 4, 3, 2

deve ter tido erro de digitação na hora de transcrever a questão.

Traceback (most recent call last): File "teste.py", line 5, in for x in L: NameError: name 'L' is not defined

Acho que o erro está em nao ter declarado a variável L (for x in L:)

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo