Considere o código fonte Python abaixo. def calcular(n):   ...

Próximas questões
Com base no mesmo assunto
Q535634 Programação
Considere o código fonte Python abaixo.

 def calcular(n):
        resultado = [ ]
        a, b = 0, 1
        while a < n:
                      ...I...  
        return resultado
res = calcular(100)
print res


Para que seja exibido [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] a lacuna I precisa ser preenchida corretamente com: 


Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Gabarito: B

Fundamento decisivo: O teste a < 100 e a sequência pedida exigem registrar cada valor corrente de a enquanto o par avança pela recorrência de Fibonacci; essa combinação identifica B.

Tema central: Listas e atribuição simultânea
Análise das alternativas
A
Errada
A chamada resultado.insert(a) é inválida: insert exige dois argumentos, índice e objeto, mas foi fornecido apenas um. A atualização do par está correta; o erro está na chamada do método.
B
Certa
Na alternativa B, resultado.append(a) acrescenta o valor corrente ao final da lista, preservando a ordem dos termos e o zero inicial. A atribuição simultânea a, b = b, a+b calcula as duas expressões com os valores anteriores das variáveis: a recebe o antigo b, e b recebe a soma do par anterior. Assim, mantém-se a recorrência de Fibonacci. O limite 100 restringe o valor de a, não a quantidade de elementos.
C
Errada
resultado é uma lista, e listas não possuem método add. Além disso, a atribuição a, b = a, a+b mantém a igual a zero; mesmo que a inserção fosse corrigida, a condição a < 100 permaneceria verdadeira e o laço não terminaria normalmente.
D
Errada
append está correto, mas a atualização a, b = a+b, b mantém b igual a 1. Com isso, a aumenta de uma unidade por iteração, e a lista recebe os inteiros de 0 a 99, não a sequência solicitada.
E
Errada
A atualização a, b = b, a+b está correta, mas resultado.add(a) usa um método inexistente para listas. Portanto, não realiza a inserção necessária.
Pegadinha da questão
A questão explora a confusão entre append e insert e a leitura da atribuição simultânea como se fossem atribuições sequenciais. Também exige perceber que manter uma das variáveis fixa altera a sequência gerada.
Dica para questões semelhantes
  • Confira o método e seus argumentos: append recebe o elemento; insert exige índice e elemento; listas não possuem add.
  • Em atribuições simultâneas, calcule todas as expressões à direita com os valores anteriores antes de atualizar as variáveis.
  • Verifique a ordem entre registrar e atualizar: inserir antes da atualização preserva o valor inicial.
  • Leia a condição do laço como limite da variável testada, sem confundi-la com a quantidade de termos.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

o método append em Python serve para "apensar" o objeto passado como parâmetro à lista. Desse modo, o único trecho de código que corresponde ao output dado é a letra B.

O append()método acrescenta um elemento ao final da lista.

Sintaxe:

list.append(elmnt)

 

Iteração 1:

A = 0

B = 1

0 < n (condição do loop):

Imprime: 0

 

Iteração 2:

A = 0

B = 1

1 < 10 (condição do loop):

Imprime: 0 1

A = 1 / B = 0 + 1 (1)

 

Iteração 3:

A = 1

B = 1

1 < 10 (condição do loop):

Imprime: 0 1 1

A = 1 / B = 1 + 1 (2)

 

Iteração 4:

A = 1

B = 2

2 < 10 (condição do loop):

Imprime: 1 1 2

A = 2 / B = 1 + 2 (3)

 

Iteração 5:

A = 2

B = 3

3 < 10 (condição do loop):

Imprime: 1 1 2 3

A = 3 / B = 5

Já que o QC não tem a capacidade de colocar um código formatado decentemente, segue o mesmo para os colegas:

def calcular(n): 

resultado = [] 

   a, b = 0, 1

   while a < n: 

     ...I...

return resultado 

   

res = calcular(100) 

print res

LETRA B

Decorem o fibonacci e o fatoria, a FCC adora, em qualquer linguagem:

Q701574

Append: Função utilizada para adicionar um item ao final da lista. Pensando como uma pilha, de modo inverso a uma lista, ele adiciona um item no topo.

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo