Pular para o conteúdo principal

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

ProgramaçãoPython
Código
fg086228
Banca
FGV
Órgão
INPE
Ano
2024
Nível
Superior
Cargo
Tecnologista Pleno I - Desenvolvimento de Software e Sistemas para Área de Geoinformática
Considere o trecho de código dado abaixo escrito na linguagem de programação Python, com uso da biblioteca para computação científica NumPy.>>> import numpy as np>>> x = np.array([('Morango', 25, 18.3), ('Abacate', 37, 2.5)], dtype=[('nome', 'U10'), ('codigo', 'i4'), ('valor', 'f4')])Com relação ao trecho acima, analise os itens a seguir:I. O comando abaixo retorna o valor ('Morango', 25, 18.3). >>> x[0]II. O comando abaixo retorna o valor 2.5. >>> x[x['codigo']>30]['valor']III. O comando abaixo altera o campo “nome” do último elemento do array. >>> x['nome'][:]='Laranja'Está correto o que se afirma em:
  1. AI, apenas.
  2. BII, apenas.
  3. CI e II, apenas.
  4. DI e III, apenas.
  5. EI, II e III.
Revelar gabarito e comentário

GabaritoA — I, apenas.

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”.

Análise de array NumPy com dtype estruturado

Gabarito: A (apenas o item I). O item I está correto: x[0] acessa a primeira linha do array, retornando uma tupla nomeada. O item II está incorreto, pois a expressão x[x['codigo']>30]['valor'] retorna um array NumPy (um array de um elemento) e não o valor escalar 2.5. O item III está incorreto, pois x['nome'][:]='Laranja' altera o campo 'nome' de todos os elementos, não apenas do último.

A questão explora o uso de arrays estruturados do NumPy, que permitem misturar tipos de dados em uma mesma estrutura. É essencial compreender como a indexação booleana e o acesso a campos funcionam.

Item

Afirmação

Correto?

Motivo

I

x[0] retorna ('Morango', 25, 18.3)

✅ Sim

Acessa o primeiro elemento do array estruturado, retornando a tupla nomeada.

II

x[x['codigo']>30]['valor'] retorna 2.5

❌ Não

Retorna um array NumPy de shape (1,) com o valor 2.5, não um escalar.

III

x['nome'][:]='Laranja' altera o campo 'nome' do último elemento

❌ Não

Altera o campo 'nome' de todos os elementos (uso de [:]).

1Acesso a elemento
x[0] → tupla nomeada
2Indexação booleana + campo
Retorna array, não escalar
3Atribuição com slice [:]
Altera todos os elementos
Array estruturado NumPy
LEVELsoulevel.com.br
Array estruturado NumPy: Acesso a elemento (x[0] → tupla nomeada); Indexação booleana + campo (Retorna array, não escalar); Atribuição com slice [:] (Altera todos os elementos)

Item I — ✅ Correto

x[0] retorna o primeiro elemento do array, que é uma tupla nomeada com os valores ('Morango', 25, 18.3). Isso é o comportamento esperado para arrays estruturados.

Item II — ❌ Incorreto

x[x['codigo']>30]['valor'] realiza:

  • x['codigo']>30 → array booleano [False, True].

  • x[ [False, True] ] → array contendo apenas o segundo elemento (('Abacate', 37, 2.5)).

  • ['valor'] → extrai o campo 'valor' desse sub-array, resultando em um array NumPy de shape (1,) com o valor 2.5 (dtype float32).

A afirmação diz que retorna o valor 2.5, mas na verdade retorna um array contendo 2.5. A banca costuma considerar isso um erro, pois o retorno não é um escalar Python.

NÃO CAIA NESSA!

A banca testa se você confunde o resultado de uma indexação booleana com acesso a campo. O retorno é um array (ainda que com um único elemento), e não o valor numérico puro. Lembre-se: em NumPy, muitas operações preservam a estrutura de array.

Item III — ❌ Incorreto

x['nome'][:]='Laranja' atribui a string 'Laranja' a todas as posições do campo 'nome' (o slice [:] seleciona todo o eixo). Portanto, tanto o primeiro quanto o segundo elemento terão seus nomes alterados. A afirmação diz "altera o campo nome do último elemento", o que é falso.

Conclusão: Apenas o item I está correto, portanto a alternativa A é o gabarito.

Link permanente: /questoes/fg086228