← Questões de Programação

Programação · FGV · 2022

Questão comentada de Programação

Analise o código Python a seguir. x = lambda a, b: a + [a[-1] + a[-2] + b] y=[-1,0] for i in range(7): y = x(y, i) print (y) O resultado produzido pela execução desse código na IDLE Shell 3.9.9 é:

Gabarito: D

A ideia aqui é enxergar que a funcao lambda recebe a lista atual e acrescenta um novo elemento no fim. Esse novo elemento vem da soma dos dois ultimos valores da lista, mais o valor de i do for. Em outras palavras, a cada volta do laco, a lista vai crescendo como uma sequencia recursiva, quase um Fibonacci com tempero extra do contador. Comecando com y = [-1, 0], o primeiro passo usa a = [-1, 0] e b = 0, entao o novo termo e -1 + 0 + 0 = -1. Depois, com y = [-1, 0, -1] e b = 1, o novo termo passa a ser 0 + (-1) + 1 = 0. Daqui em diante, a mesma regra se repete: sempre pega os dois ultimos elementos e soma com o i da vez. Se voce acompanhar as 7 iteracoes, a lista final fica [-1, 0, -1, 0, 1, 4, 9, 18, 33]. Esse e justamente o padrao da alternativa D. O print mostra a lista completa, porque em Python listas sao mutaveis no sentido de referencia da variavel, mas aqui a cada iteracao o retorno da lambda substitui y por uma nova lista extendida. A pegadinha e achar que a sequencia segue Fibonacci puro. Nao segue, porque o b do for entra na conta e altera o valor de cada novo termo. Por isso, a conta correta depende tanto dos dois ultimos elementos quanto do indice atual.

Continue treinando

Questões relacionadas