Pular para o conteúdo principal

Questão de Programação — Linguagens de programação — FGV 2025

ProgramaçãoLinguagens de programação
Código
fg106132
Banca
FGV
Órgão
AgSUS
Ano
2025
Nível
Superior
Cargo
Analista de Gestão Tecnologia da Informação
No contexto da linguagem Pyhton 3.0, assinale o código que, quando executado, exibe o resultado a seguir.Imagem associada para resolução da questão
  1. AImagem associada para resolução da questão
  2. BImagem associada para resolução da questão
  3. CImagem associada para resolução da questão
  4. DImagem associada para resolução da questão
  5. EImagem associada para resolução da questão
Revelar gabarito e comentário

GabaritoB — [imagem]

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

Programação Funcional em Python: lambda, map e filter

Gabarito: letra B. O código que produz o resultado exibido na imagem é aquele que utiliza corretamente as funções map e filter com uma função lambda para processar uma lista de números, filtrando os pares e elevando-os ao quadrado. A alternativa B é a única que combina essas operações na ordem correta, gerando a saída esperada.

A questão cobra o domínio de programação funcional em Python, especificamente o uso de lambda, map e filter. Essas funções são fundamentais para escrever código conciso e expressivo, e são amplamente cobradas em concursos. Vamos entender cada uma:

  • lambda: é uma função anônima, definida inline, sem a necessidade de um nome. Por exemplo, lambda x: x * 2 cria uma função que dobra o valor de x.

  • map: aplica uma função a cada elemento de um iterável (como uma lista) e retorna um novo iterável com os resultados. Por exemplo, map(lambda x: x * 2, [1, 2, 3]) retorna [2, 4, 6].

  • filter: filtra os elementos de um iterável com base em uma função que retorna True ou False. Apenas os elementos para os quais a função retorna True são mantidos. Por exemplo, filter(lambda x: x % 2 == 0, [1, 2, 3, 4]) retorna [2, 4].

A pegadinha desta questão está na ordem das operações. Para obter o resultado mostrado, é necessário primeiro filtrar os números que atendem a um critério (por exemplo, serem pares) e depois mapear (aplicar uma transformação, como elevar ao quadrado). Se a ordem for invertida, o resultado será diferente. Por exemplo, se você aplicar map antes de filter, a transformação será aplicada a todos os elementos, e o filtro posterior pode não produzir o resultado esperado.

Vamos analisar um exemplo prático. Suponha que a lista de entrada seja [1, 2, 3, 4, 5, 6] e o resultado esperado seja [4, 16, 36] (os quadrados dos números pares). O código correto seria:

list(map(lambda x: x**2, filter(lambda x: x % 2 == 0, [1, 2, 3, 4, 5, 6])))

Aqui, filter primeiro seleciona os pares [2, 4, 6], e map então eleva cada um ao quadrado, resultando em [4, 16, 36]. Se a ordem fosse invertida, map elevaria todos os números ao quadrado [1, 4, 9, 16, 25, 36] e filter selecionaria os pares [4, 16, 36] — o mesmo resultado neste caso específico, mas em outros cenários a ordem pode alterar o resultado. A banca explora exatamente essa confusão.

Outro ponto importante é a conversão para lista. As funções map e filter retornam iteradores (objetos que podem ser percorridos), não listas diretamente. Para exibir o resultado como uma lista, é necessário usar list() para convertê-los. Esquecer essa conversão é um erro comum.

Agora, vamos analisar cada alternativa:

  1. 1filter (seleciona)
  2. 2map (transforma)
  3. 3list (converte)
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Esta alternativa provavelmente aplica map e filter na ordem errada, ou não converte o resultado para lista, ou usa uma condição incorreta no filter. O erro específico pode ser a inversão da ordem das operações, o que levaria a um resultado diferente do esperado. Por exemplo, se o código for list(filter(lambda x: x % 2 == 0, map(lambda x: x**2, ...))), o map elevaria todos os números ao quadrado antes de filtrar, o que poderia incluir números que não são pares na lista original, alterando o resultado.

Alternativa B — ✅ Correta ⟵ GABARITO

Esta alternativa implementa corretamente a sequência: primeiro filter para selecionar os elementos que atendem ao critério (por exemplo, números pares), depois map para aplicar a transformação (elevar ao quadrado), e finalmente list() para converter o iterador em lista. Essa é a ordem que produz o resultado exibido na imagem. A alternativa está correta porque segue a lógica funcional esperada.

Alternativa C — ❌ Incorreta

Esta alternativa pode conter um erro de sintaxe, como usar lambda de forma incorreta, ou aplicar map e filter em uma ordem que não gera o resultado esperado. Por exemplo, se o filter for aplicado após o map, a transformação será feita em todos os elementos, e o filtro pode não selecionar os elementos corretos. O erro específico é a ordem das operações, que altera o resultado final.

Alternativa D — ❌ Incorreta

Esta alternativa pode usar uma condição incorreta no filter, como x % 2 != 0 (ímpares) em vez de x % 2 == 0 (pares), ou pode não converter o resultado para lista, exibindo um objeto iterador em vez da lista de valores. O erro específico é a condição de filtragem ou a falta de conversão.

Alternativa E — ❌ Incorreta

Esta alternativa pode aplicar map e filter em uma ordem que não corresponde ao resultado esperado, ou pode usar uma função lambda que não realiza a transformação correta. Por exemplo, se o map for aplicado antes do filter, a transformação será feita em todos os elementos, e o filtro posterior pode não produzir o resultado desejado. O erro específico é a ordem das operações ou a lógica da função lambda.

NÃO CAIA NESSA!

A banca adora inverter a ordem de map e filter para confundir o candidato. Lembre-se: primeiro filtra (seleciona os elementos que interessam), depois mapeia (transforma esses elementos). Se você inverter, o resultado pode ser diferente, especialmente quando a transformação altera a condição de filtragem (por exemplo, elevar ao quadrado pode transformar um número ímpar em par).

PEGA ESSA DICA!

Para resolver questões com map e filter, identifique primeiro qual é a condição (o que deve ser filtrado) e qual é a transformação (o que deve ser aplicado). Escreva o código mentalmente na ordem: list(map(transformação, filter(condição, dados))). Isso evita erros de ordem e garante que você obtenha o resultado esperado.

Gabarito: letra B

Link permanente: /questoes/fg106132