Pular para o conteúdo principal

Questão de Programação — Python — FGV 2024

ProgramaçãoPython
Código
fg085243
Banca
FGV
Órgão
EPE
Ano
2024
Nível
Superior
Cargo
Analista de Pesquisa Energética (Recursos Energéticos)
Considere o código a seguir, escrito na linguagem de programação Python (versão 3.11.3).<1> import numpy as np<2> x = np.arange(1,30,2).reshape(3,5)<3> y = x[[1,2]]<4> y[0,:]=0<5> z = x[0,2]Assinale a opção que indica o valor que z recebe na linha <5>.
  1. A0
  2. B5
  3. Carray([[ 0, 0, 0, 0, 0]])
  4. Darray([[11, 13, 15], [21, 23, 25]])
  5. Earray([[ 1, 3, 5 ], [11, 13, 15]])
Revelar gabarito e comentário

GabaritoB — 5

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Numpy — Indexação e Cópia vs Visão

Gabarito: letra B. O código cria um array x de 3×5 e, em seguida, y recebe uma cópia das linhas 1 e 2 através de fancy indexing (x[[1,2]]). Como a indexação com lista gera uma cópia, a alteração y[0,:]=0 não modifica x. Portanto, z = x[0,2] continua valendo 5, o elemento original.

A FGV testa o conhecimento sobre a diferença entre slicing (que cria visão) e fancy indexing (que cria cópia). Vamos executar mentalmente:

  • np.arange(1,30,2) gera [1,3,5,7,9,11,13,15,17,19,21,23,25,27,29].

  • reshape(3,5) monta a matriz:

    ```

    [[ 1, 3, 5, 7, 9],

    [11, 13, 15, 17, 19],

    [21, 23, 25, 27, 29]]

    ```

  • y = x[[1,2]] seleciona as linhas 1 e 2 (índices 1 e 2) e copia esses dados para y:

    ```

    [[11, 13, 15, 17, 19],

    [21, 23, 25, 27, 29]]

    ```

  • y[0,:] = 0 altera a primeira linha da cópia, mas x permanece intacto.

  • z = x[0,2] acessa o elemento da linha 0, coluna 2 da matriz original, que é 5.

NÃO CAIA NESSA!

A banca explora a confusão entre visão (slicing) e cópia (fancy indexing). Muitos alunos, ao verem y[0,:]=0, acham que x também é alterado e que z valeria 0. Lembre-se: fancy indexing (lista de índices) SEMPRE gera uma cópia; apenas slicing com : ou fatias (x[1:3]) cria visão.

  1. 1np.arange(1,30,2)
  2. 2reshape(3,5)
  3. 3y = x[[1,2]] (cópia)
  4. 4y[0,:] = 0 (não afeta x)
  5. 5z = x[0,2] = 5
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Sugere 0. Ocorreria se y fosse uma visão de x, mas não é — é uma cópia.

Alternativa B — ✅ Correta ⟵ GABARITO

z recebe o valor escalar 5, conforme o raciocínio acima.

Alternativa C — ❌ Incorreta

Apresenta um array 1×5 de zeros, que seria o conteúdo de y após a modificação, não o valor de z.

Alternativa D — ❌ Incorreta

Corresponde à seleção x[[1,2]] sem a modificação, mas z é um escalar.

Alternativa E — ❌ Incorreta

Mostra as duas primeiras linhas da matriz original; novamente, z é um escalar.

Gabarito: letra B

Link permanente: /questoes/fg085243