Questão nº 53
Questão de Tecnologia da Informação · FGV BANESTES 2021 (nº 53)
Considere o código Python 2.7 a seguir.
```
def ABC(L, n):
while True:
if len(L) >= n:
return L
else:
L.append(len(L) ** 2)
print ABC([20],10)
```
O resultado da execução desse código é:
- A`[1, 4, 9, 16, 25, 36, 49, 64]`
- B`[1, 4, 9, 16, 25, 36, 49, 64, 81]`
- C`[20, 1, 4, 9, 16, 25, 36, 49, 64]`
- D`[20, 1, 4, 9, 16, 25, 36, 49, 64, 81]` (alternativa correta)
- E`[20, 4, 9, 16, 25, 36, 49, 64, 81]`
Resposta comentada
Gabarito Alternativa D
Este código Python utiliza um laço while True que continua adicionando elementos a uma lista (L) até que seu tamanho (len(L)) atinja ou ultrapasse um valor n especificado. A cada adição, o novo elemento é o quadrado do tamanho atual da lista.
(A) Incorreta: Esta alternativa está incorreta porque ignora o elemento inicial 20 da lista L e também para uma iteração antes do necessário (a lista final deveria ter 10 elementos, não 9).
(B) Incorreta: Esta é uma armadilha comum. A lista L é passada por referência para a função, o que significa que as modificações dentro da função afetam a lista original. Portanto, o elemento inicial 20 deve ser mantido. Além disso, a lista final deveria ter 10 elementos, não 9.
(C) Incorreta: Esta alternativa está incorreta porque, embora inclua o elemento inicial 20, ela para uma iteração antes do necessário. O loop deve continuar até que len(L) seja igual a n (10), resultando em 10 elementos.
(D) Correta: A função ABC recebe L = [20] e n = 10. O loop while True executa:
len(L)é 1.1 >= 10é falso.L.append(len(L)**2)->L.append(1**2)->Lse torna[20, 1].len(L)é 2.2 >= 10é falso.L.append(len(L)**2)->L.append(2**2)->Lse torna[20, 1, 4].len(L)é 3.3 >= 10é falso.L.append(len(L)**2)->L.append(3**2)->Lse torna[20, 1, 4, 9].
...len(L)é 9.9 >= 10é falso.L.append(len(L)**2)->L.append(9**2)->Lse torna[20, 1, 4, 9, 16, 25, 36, 49, 64, 81].len(L)é 10.10 >= 10é verdadeiro. A função retornaL.
O resultado final é[20, 1, 4, 9, 16, 25, 36, 49, 64, 81].
(E) Incorreta: Esta alternativa está incorreta porque, embora inclua o elemento inicial20e tenha o tamanho correto, ela pula o valor1(que é1**2), que deveria ser o primeiro elemento adicionado à lista.
Fonte: FGV BANESTES 2021 Analista em Tecnologia da Informação - Desenvolvimento de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.