-
0ITeração:a=0b=1
1IT:a=1 b=2
2IT:a=2 b=3
3IT: a=3 b=5
4IT:a=5 b=8
5IT:a=8 b=13
-
Fiquei um bom tempo tentando entender este código. Na verdade o Teo fez errado. O certo é:
0IT:a=0b=1
2IT:a=1b=1
3IT:a=1 b=2
4IT:a=2 b=3
5IT: a=3 b=5
5IT:a=5 b=8
6IT:a=8 b=13
-
>>> a,b = 0,1
>>> while b < 10:
print(a, b)
a,b = b , a+b
0 1
1 1
1 2
2 3
3 5
5 8
>>> a
8
>>> b
13
Ou seja, apesar a última resposta ser a=5, b=8 o ultimo valor armazenado para a,b são: a=8, b=13
-
É uma questão de seguência de fibonnaci
-
Antes de mais nada, vamos entender o que o código do enunciado faz.
A última linha do código, a que faz a atribuição dupla das variáveis a e b é a mais importante para a solução da questão.
O 1o elemento, a variável a, recebe o valor de b. E o 2o elemento, a variável b, recebe o valor de a + b.
Vamos fazer um teste de mesa para observar como o algoritmo se comporta ao longo da execução.
Inicialmente, a = 0 e b = 1.
a 0
b 1
Como b =1, satisfaz a condição para entrada no while (b < 10).
Dentro da 1a iteração do while ele imprime o valor de b e na linha seguinte faz a atribuição dupla. Primeiramente ocorre a atribuição a = b = 1 e após isso a atribuição b = a + b = 0 + 1 = 1, conforme explicamos no esquema.
a 0 1
b 1 1
Dentro da 2a iteração do while ele imprime o valor de b e na linha seguinte faz a atribuição dupla. Primeiramente ocorre a atribuição a = b = 1 e após isso a atribuição b = a + b = 1 + 1 = 2.
a 0 1 1
b 1 1 2
Dentro da 3a iteração do while ele imprime o valor de b e na linha seguinte faz a atribuição dupla. Primeiramente ocorre a atribuição a = b = 2 e após isso a atribuição b = a + b = 1 + 2 = 3.
a 0 1 1 2
b 1 1 2 3
Dentro da 4a iteração do while ele imprime o valor de b e na linha seguinte faz a atribuição dupla. Primeiramente ocorre a atribuição a = b = 3 e após isso a atribuição b = a + b = 2 + 3 = 5.
a 0 1 1 2 3
b 1 1 2 3 5
Dentro da 5a iteração do while ele imprime o valor de b e na linha seguinte faz a atribuição dupla. Primeiramente ocorre a atribuição a = b = 5 e após isso a atribuição b = a + b = 3 + 5 = 8.
a 0 1 1 2 3 5
b 1 1 2 3 5 8
Dentro da 6a iteração do while ele imprime o valor de b e na linha seguinte faz a atribuição dupla. Primeiramente ocorre a atribuição a = b = 8 e após isso a atribuição b = a + b = 5 + 8 = 13.
a 0 1 1 2 3 5 8
b 1 1 2 3 5 8 13
Neste ponto, b = 13 faz com que a condição de permanência no while, que é b < 10, deixe de ser verdadeira. Assim, é encerrado o loop e o algoritmo como um todo. Os valores de a e b são, respectivamente, 8 e 13.
Resposta: B
-
Gabarito: B.
Novamente, outra sequência de Fibonnaci.
Iniciando: a = 0, b = 1.
Sequenciando:
a = 1, b=1
a = 1, b= 2
a = 2, b=3
a = 3, b= 5
a = 5, b = 8
a = 8, b = 13.
Fim.
Bons estudos!
-
Pelo jeito que está a questão não há resposta, haja vista a falta de indentação no código que, por conseguinte, apresentaria erro. O correto seria (Python 3.8):
a, b = 0, 1
while b < 10:
#indentação print(b)
#indentação a, b = b, a+b
E as impressões de b resultariam em: 1, 1, 2, 3, 5, 8. Enquanto o último valor armazenado de b seria 13.
-
Se fosse questão de C e E com certeza estaria errada. O código, para rodar e apresentar as opções das alternativas, deveria estar escrito da seguinte forma:
a, b = 0, 1
while b < 10:
(indentação) print (a+b)
(indentação) a, b = b, a+b
-
Para quem ainda tem dúvida um professor explica sobre essa aplicação de Fibonacci e em seguida resolve exatamente essa questão.
-
A dificuldade dessa questão é entender q a atribuição dupla é diferente da atribuição simples:
Faça o teste. Entre no site https://replit.com/languages/python3 e digite esse código (atribuição simples):
a, b = 0, 1
while b< 10:
print (b)
a = b
b = a + b
print (a)
print (b)
________________________________________
Abra outra aba e naquele mesmo site, digite o código (esse tem atribuição dupla de "a" e "b" ocorrendo na mesma linha) e dê "run":
a, b = 0, 1
while b< 10:
print (b)
a, b = b, a + b
print (a)
print (b)
_____________________
Abraço