Considere o trecho do código escrito na linguagem Python 3.1...
Considere o trecho do código escrito na linguagem Python 3.10 apresentado a seguir:
def my(x):
---return lambda y: sum(range(x)) + y
not_my=my(1)
print(not_my(10))
Indique a alternativa que apresenta CORRETAMENTE o resultado da sua execução:
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
A alternativa correta é: B - 10
Vamos entender o porquê desta resposta:
O código fornecido é o seguinte:
def my(x):
return lambda y: sum(range(x)) + y
not_my = my(1)
print(not_my(10))
Primeiro, observe a função my(x). Ela retorna uma função lambda que recebe um argumento y. Essa função lambda calcula a soma dos números em um intervalo de 0 até x-1 (usando sum(range(x))) e adiciona y ao resultado.
Passo a passo da execução:
1. not_my = my(1): Chama a função my com x valendo 1. A função my retorna a função lambda lambda y: sum(range(1)) + y. Assim, not_my se torna essa função lambda.
2. print(not_my(10)): Agora estamos chamando a função lambda armazenada em not_my com y = 10. Vamos calcular o valor dessa função passo a passo:
- sum(range(1)) é a soma dos números de 0 a 0, que é apenas 0.
- Então, a expressão se torna 0 + 10, que resulta em 10.
As alternativas incorretas são:
A - 1: Esta alternativa está incorreta porque ela parece confundir a soma dos elementos do range(1) com o valor final da expressão. No entanto, o valor final da expressão é a soma de sum(range(1)) e y, não apenas sum(range(1)).
C - 11: Esta alternativa está incorreta porque parece considerar que sum(range(1)) é 1, quando na verdade é 0.
D - Será apresentada uma mensagem de erro de sintaxe: Este é claramente um equívoco, pois o código é sintaticamente correto e executável.
E - NaN: NaN significa "Not a Number" e é normalmente usado em contextos de operações inválidas com números. Não há nada no código que levaria a um resultado de NaN.
Gostou do comentário? Deixe sua avaliação aqui embaixo!
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo