SóProvas


ID
1365778
Banca
FCC
Órgão
TRT - 13ª Região (PB)
Ano
2014
Provas
Disciplina
Programação
Assuntos

Considere o código abaixo, digitado em Python.

a, b = 0, 1
while b < 10:
   print b
   a, b = b, a+b

No final da execução do código, o último valor armazenado nas variáveis a e b serão, respectivamente,

Alternativas
Comentários
  • 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