Questão de Programação — Linguagens de programação — FGV 2025
- Código
- fg106132
- Banca
- FGV
- Órgão
- AgSUS
- Ano
- 2025
- Nível
- Superior
- Cargo
- Analista de Gestão Tecnologia da Informação

- A

- B

- C

- D

- E







GabaritoB — [imagem]
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:
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.
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.
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.
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.
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.
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).
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