Questão de Programação — Python — FGV 2024
- Código
- fg099946
- Banca
- FGV
- Órgão
- TJ-RR
- Ano
- 2024
- Nível
- Superior
- Cargo
- Analista Judiciário - Desenvolvimento de Sistemas
- AI, apenas.
- BII, apenas.
- CI e II, apenas.
- DII e III, apenas.
- EI, II e III.
GabaritoD — II e III, apenas.
Gabarito: D (II e III apenas). O item I está incorreto porque o método pop(0) gera um KeyError (a chave 0 não existe no dicionário), e a afirmação de que y seria zero é falsa. O item II está correto: o break interrompe o loop antes que a atribuição y = x seja executada. O item III está correto: a função recursiva calcula o fatorial, e f(5) retorna 120.
A comprehension {x : x ** 2 for x in range(10) if x%2} gera um dicionário apenas com os números ímpares de 0 a 9 (1, 3, 5, 7, 9). O dicionário resultante é {1:1, 3:9, 5:25, 7:49, 9:81}. A chamada x.pop(0) tenta remover a chave 0, que não existe no dicionário. Em Python, o método pop( chave ) levanta um KeyError se a chave não for encontrada (a menos que um valor padrão seja fornecido como segundo argumento). Portanto, a execução da linha <2> causa uma exceção, e y nunca recebe valor algum — a afirmação de que y seria zero é falsa.
Muitos candidatos confundem pop com pop( chave, default ) ou com o método get, que retorna None para chave ausente. Lembre-se: pop sem valor padrão sempre gera KeyError se a chave não existir.
x = 1
while x < 100:
x = x + 1
if not x // 3:
break
else:
y = xA execução passo a passo:
x = 1 → inicia o while (1 < 100)
x é incrementado para 2.
A condição if not x // 3: testa 2 // 3 = 0 → not 0 é True → executa break, saindo imediatamente do laço.
O bloco else do if (que contém y = x) não é executado porque o break interrompe o loop antes de chegar à linha y = x.
Portanto, a afirmação de que a atribuição na linha <7> não será executada está correta.
Em Python, o break interrompe o laço mais interno imediatamente, e o else do if fica de fora. Para visualizar fluxos como esse, desenhe um fluxograma ou simule com poucas iterações.
A função f(n) é uma implementação recursiva do fatorial:
Se n == 1, retorna 1.
Caso contrário, retorna f(n-1) * n.
Calculando f(5):
f(5) = f(4) * 5
f(4) = f(3) * 4
f(3) = f(2) * 3
f(2) = f(1) * 2
f(1) = 1
Substituindo: f(5) = 1 * 2 * 3 * 4 * 5 = 120. A afirmação está correta.
Conclusão: Apenas os itens II e III são verdadeiros. Portanto, o gabarito é a letra D.
Link permanente: /questoes/fg099946