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 ponto decisivo é "resultado = [ ]" indica uma lista Python e, com "a, b = 0, 1" e "while a < n:", a lacuna deve combinar o método adequado de lista com o avanço correto da sequência: registrar o valor corrente de a com append(a) e depois atualizar o par com "a, b = b, a+b". Esse critério confirma a alternativa B.

Tema central: Fibonacci em lista Python
Análise das alternativas
A
Errada
Está errada porque usa "resultado.insert(a)", e o critério decisivo do enunciado exige acumular termos em uma lista de modo compatível com inserção simples ao final. Pela base, insert não corresponde ao uso correto esperado nesse contexto e, além disso, sua assinatura exige posição e elemento. Mesmo com a atualização "a, b = b, a+b" correta, o método de lista elimina a alternativa.
B
Certa
A alternativa B é a única que atende simultaneamente aos dois requisitos técnicos do laço. Primeiro, "resultado.append(a)" é o método adequado para acrescentar o termo corrente ao final da lista indicada por "resultado = [ ]". Segundo, "a, b = b, a+b" faz a atualização simultânea correta do par da sequência de Fibonacci, preservando os valores antigos do lado direito e gerando a progressão 0, 1, 1, 2, 3, 5, ... até o limite imposto por "while a < n". Assim, a lista retornada coincide com a saída exigida.
C
Errada
Está errada por dois motivos técnicos independentes. Primeiro, "resultado.add(a)" não é método de lista Python, e o enunciado fixa "resultado = [ ]", ou seja, uma lista. Segundo, "a, b = a, a+b" não faz a variável a avançar para o próximo termo; isso quebra a recorrência correta da Fibonacci e compromete a evolução exigida pela saída.
D
Errada
Está errada porque, embora "resultado.append(a)" seja compatível com a lista, a atualização "a, b = a+b, b" não implementa a recorrência correta da Fibonacci. O critério do laço exige deslocar o par para o próximo estado como "a, b = b, a+b". Ao manter b inalterado nessa forma, a sequência gerada deixa de ser a pedida.
E
Errada
Está errada porque "resultado.add(a)" não é método válido para lista Python. O fato de a atualização "a, b = b, a+b" estar correta não salva a alternativa, já que o enunciado exige formar a saída em "resultado", que foi definido como lista e deve ser preenchido com o método adequado para lista.
Pegadinha da questão
A banca explorou duas confusões reais: trocar append por add ou insert em uma lista e alterar a atribuição múltipla de forma parecida, mas incompatível com a recorrência correta da sequência de Fibonacci.
Dica para questões semelhantes
  • Se o código mostra "resultado = [ ]", valide primeiro se o método usado pertence a lista e se a operação pretendida é acrescentar ao final.
  • Em geração iterativa de Fibonacci com duas variáveis, confira se o próximo par é exatamente "a, b = b, a+b".
  • Quando a saída esperada é uma sequência específica, teste mentalmente as primeiras iterações para verificar se a atualização realmente produz 0, 1, 1, 2, 3, 5.
  • Em Python, atribuição múltipla usa simultaneamente os valores antigos do lado direito; isso é parte do critério quando a lógica depende do estado anterior.

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