Pular para o conteúdo principal

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

ProgramaçãoPython
Código
fg127804
Banca
FGV
Órgão
AL-RO
Ano
2026
Nível
Médio
Cargo
Assistente Legislativo (Técnico em Informática)
O trecho de código Python a seguir pretende filtrar números pares de uma lista e retornar uma nova lista:


Imagem associada para resolução da questão


De acordo com esse trecho, em vez da lista completa de pares, o resultado impresso será [2], indicando que há um erro na programação.


Nesse caso, o erro está
  1. Ana inicialização da lista pares = []
  2. Bno uso de range(len(numeros)) em vez de enumerate(numeros)
  3. Cna condição numeros[i] % 2 == 0
  4. Dna indentação do return pares
  5. Ena chamada da função filtrar_pares([1, 2, 3, 4, 5, 6])
Revelar gabarito e comentário

GabaritoD — na indentação do return pares

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

Python: indentação e escopo de blocos

Gabarito: letra D. O erro está na indentação do return pares: como o return está alinhado com o for (mesmo nível de indentação), ele é executado logo após a primeira iteração do laço, retornando a lista com apenas o primeiro número par encontrado ([2]), em vez de aguardar o fim do loop para retornar a lista completa. Em Python, a indentação define os blocos de código — não há chaves {} como em Java ou C —, e é exatamente essa característica que a banca explora.

A indentação é o mecanismo que o Python usa para delimitar blocos de código. Diferente de linguagens como Java, C ou C++, que usam chaves {} para agrupar comandos, o Python usa o recuo (espaços ou tabs) para indicar quais instruções pertencem a um mesmo bloco. Isso significa que a posição horizontal de cada linha não é apenas estética: ela define a estrutura lógica do programa. Um return indentado dentro de um for será executado a cada iteração; um return alinhado com o for será executado apenas após o laço terminar. A confusão entre esses dois níveis é uma das pegadinhas mais comuns em questões de Python.

Vamos reconstruir o código provável da questão para entender o erro:

def filtrar_pares(numeros):
    pares = []
    for i in range(len(numeros)):
        if numeros[i] % 2 == 0:
            pares.append(numeros[i])
    return pares  # ← indentação correta: alinhado com o for

print(filtrar_pares([1, 2, 3, 4, 5, 6]))  # [2, 4, 6]

Se o return pares estiver indentado dentro do for (ou seja, com o mesmo recuo do if), o laço retorna na primeira iteração em que encontra um par:

def filtrar_pares(numeros):
    pares = []
    for i in range(len(numeros)):
        if numeros[i] % 2 == 0:
            pares.append(numeros[i])
            return pares  # ← indentação errada: dentro do for

print(filtrar_pares([1, 2, 3, 4, 5, 6]))  # [2]

No segundo caso, ao encontrar o número 2 (índice 1), o return é executado imediatamente, devolvendo [2] e encerrando a função — exatamente o comportamento descrito no enunciado. O laço nunca chega a processar os números 4 e 6.

A alternativa B menciona range(len(numeros)) em vez de enumerate(numeros). Embora enumerate seja mais idiomático e legível, ambas as abordagens funcionam corretamente para percorrer a lista por índice. O problema não está aí. A alternativa C (condição numeros[i] % 2 == 0) está correta: ela verifica se o resto da divisão por 2 é zero, o que identifica números pares. A alternativa A (inicialização pares = []) também está correta — a lista precisa começar vazia para receber os elementos. A alternativa E (chamada da função) está correta: a lista [1, 2, 3, 4, 5, 6] é passada como argumento, e a função deveria retornar [2, 4, 6].

A pegadinha aqui é sutil: o código parece correto à primeira vista, mas a indentação errada do return muda completamente o fluxo de execução. O candidato que não domina o papel da indentação em Python pode não perceber o erro e marcar uma alternativa incorreta. É por isso que a banca FGV escolheu essa questão: ela testa não apenas a sintaxe, mas a compreensão do modelo de blocos da linguagem.

Guarde a regra de ouro: em Python, o return dentro de um laço encerra a função naquele ponto. Se a intenção é retornar após processar todos os elementos, o return deve estar alinhado com o for, não dentro dele. É exatamente essa distinção que separa a alternativa correta das demais.

  1. 1return dentro do for
  2. 2Executa na 1ª iteração
  3. 3Retorna [2] e encerra
  4. 4Laço nunca termina
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

A inicialização pares = [] está correta. A lista precisa começar vazia para que os números pares sejam adicionados com append. Sem essa inicialização, o código geraria um NameError ao tentar usar pares.append(). Portanto, não há erro aqui.

Alternativa B — ❌ Incorreta

O uso de range(len(numeros)) é válido em Python. Ele gera uma sequência de índices de 0 até len(numeros) - 1, permitindo acessar cada elemento da lista por posição. Embora enumerate(numeros) seja mais idiomático e legível, ambas as formas funcionam corretamente para percorrer a lista. O erro não está na escolha entre essas duas abordagens.

Alternativa C — ❌ Incorreta

A condição numeros[i] % 2 == 0 está correta. O operador % retorna o resto da divisão; se o resto for zero, o número é par. Essa é a forma padrão de verificar paridade em Python. Não há erro lógico aqui.

Alternativa D — ✅ Correta ⟵ GABARITO

A indentação do return pares é o problema. Se o return estiver indentado dentro do for (mesmo nível do if), ele será executado na primeira iteração em que um número par for encontrado, retornando [2] e encerrando a função prematuramente. Para retornar a lista completa, o return deve estar alinhado com o for, ou seja, fora do laço. Em Python, a indentação define os blocos, e essa é a causa do erro descrito no enunciado.

Alternativa E — ❌ Incorreta

A chamada filtrar_pares([1, 2, 3, 4, 5, 6]) está correta. A lista é passada como argumento, e a função deveria retornar [2, 4, 6]. O problema não está na chamada, mas no comportamento interno da função devido à indentação errada.

NÃO CAIA NESSA!

A banca explora a confusão entre return dentro do laço e return fora do laço. Em Python, a indentação é a única forma de delimitar blocos — não há chaves {}. O candidato que lê o código mentalmente como se fosse Java ou C pode não perceber que o return está dentro do for, pois visualmente a diferença é apenas um recuo. Fique atento: se o return estiver alinhado com o if, ele executa a cada iteração; se estiver alinhado com o for, executa apenas no final. Com treino, você enxerga essas armadilhas de longe 💪.

PEGA ESSA DICA!

Ao analisar código Python em provas, verifique sempre a indentação de return, break e continue dentro de laços. Pergunte-se: "este comando está dentro do loop ou fora dele?". Uma boa técnica é contar os espaços de cada linha — se o return tem o mesmo recuo do for, ele está fora; se tem o mesmo recuo do if, está dentro. Essa checagem rápida resolve a maioria das questões sobre escopo em Python.

Gabarito: letra D

Link permanente: /questoes/fg127804