SóProvas


ID
2786653
Banca
FGV
Órgão
AL-RO
Ano
2018
Provas
Disciplina
Programação
Assuntos

Analise o código Python a seguir. 


L = [1]

while len (L) < 6:

       L . append ( L [ -1 ] * len (L) )

print L  


Assinale o que acontece com esse código quando o comando Run Module (F5) é acionado na interface IDLE (Python GUI).  

Alternativas
Comentários
  • L=[1]

    while len(L) < 6:                          # a funcao len() retorna o numero de itens em um objeto

           L.append(L[-1]*len(L))

    """ o metodo append() acrescenta elementos no fim da lista e o L[-1] esta fazendo referencia ao ultimo elemento, que multiplicado por len(L) vai ter a sequencia de:

    L.append(1*1)  primeiro luping igual a 1;

    L.append(1*2)  primeiro luping igual a 2;

    L.append(2*3)  primeiro luping igual a 6;

    L.append(6*4)  primeiro luping igual a 24;

    L.append(24*5)  primeiro luping igual a 120. """

    print L

  • Porém a linguagem python exige identação. Portanto, ou o site cadastrou mal o exemplo do código ou o gabarito está errado.

  • Segundo o Gabarito da Banca, a resposta é a letra E (erro de execução).

    Pensei que fosse letra D, uma vez que o erro ocorre antes mesmo da execução do programa.

  • Galerinha, lembrem-se que a função len(L) retorna o tamanho da lista L, que L[-1] referencia o último elemento da lista e que L.append(x) insere um novo elemento x no final da lista L.

    No início, L = [1]. Logo, len(L) = 1.

    Ele chega no while e faz o teste. len(L) < 6 ? Verdadeiro porque len(L) = 1.

    Então entra na 1a iteração do while.

    Na 1a iteração é feito L.append(L[-1]*len(L)) = L.append(1 * 1) = L.append(1) = [1, 1].

    Na 2a iteração é feito L.append(L[-1]*len(L)) = L.append(1 * 2) = L.append(2) = [1, 1, 2].

    Na 3a iteração é feito L.append(L[-1]*len(L)) = L.append(2 * 3) = L.append(6) = [1, 1, 2, 6].

    Na 4a iteração é feito L.append(L[-1]*len(L)) = L.append(6 * 4) = L.append(24) = [1, 1, 2, 6, 24].

    Na 5a iteração é feito L.append(L[-1]*len(L)) = L.append(24 * 5) = L.append(120) = [1, 1, 2, 6, 24, 120].

    A 6a iteração do while não ocorre porque a essa altura len(L) < 6 deixa de ser verdade pois len(L) = 6. E a nossa lista L mutável ao final será [1, 1, 2, 6, 24, 120].

    Resposta: C

  • Que gabarito é esse? O corre é a letra E. Tentem rodar esse código...

    O print precisar dos () para funcionar. Assim: print(L)

  • Galerinha, lembrem-se que a função len(L) retorna o tamanho da lista L, que L[-1] referencia o último elemento da lista e que L.append(x) insere um novo elemento x no final da lista L.

    No início, L = [1]. Logo, len(L) = 1.

    Ele chega no while e faz o teste. len(L) < 6 ? Verdadeiro porque len(L) = 1.

    Então entra na 1ª iteração do while.

    Na 1ª iteração é feito L.append(L[-1]*len(L)) = L.append(1 * 1) = L.append(1) = [1, 1].

    Na 2ª iteração é feito L.append(L[-1]*len(L)) = L.append(1 * 2) = L.append(2) = [1, 1, 2].

    Na 3ª iteração é feito L.append(L[-1]*len(L)) = L.append(2 * 3) = L.append(6) = [1, 1, 2, 6].

    Na 4ª iteração é feito L.append(L[-1]*len(L)) = L.append(6 * 4) = L.append(24) = [1, 1, 2, 6, 24].

    Na 5ª iteração é feito L.append(L[-1]*len(L)) = L.append(24 * 5) = L.append(120) = [1, 1, 2, 6, 24, 120].

    A 6ª iteração do while não ocorre porque a essa altura len(L) < 6 deixa de ser verdade pois len(L) = 6. E a nossa lista L mutável ao final será [1, 1, 2, 6, 24, 120].

    Resposta: C

  • O comando "print L" só seria executado caso o interpretador fosse python 2. Em python 3 vai haver erro de execução, pq requer o parênteses. Ao meu ver deveria ser anulada, pois há duas respostas possiveis, letra C e E.

  • Ao executar o algoritmo a saída apresentada é essa:

    [1, 1]

    [1, 1, 2]

    [1, 1, 2, 6]

    [1, 1, 2, 6, 24]

    [1, 1, 2, 6, 24, 120]

    Em cada append (adicionar um termo ao vetor), o valor final é multiplicado pelo tamanho (len) atual do vetor, e depois impresso, repetindo isso enquanto o tamanho do vetor for menor que 6.

    1ª loop = append (1*1) = 1

    2ª loop = appen (1*2) = 2

    3ª loop = append (2*3) = 6

    4ª loop = append (6*4) = 24

    5ª loop = append (24*5) = 120

    Vetor atingiu o tamanho de 6, fim do while

  • Discordo do gabarito, pois no final devia estar print (L) , pois com o L sem os parenteses dá erro na execução.

  • A função len(L) retorna o tamanho da lista L, que L[-1] referencia o último elemento da lista e que L.append(x) insere um novo elemento x no final da lista L.

    No início, L = [1].

    Logo, len(L) = 1.

    Ele chega no while e faz o teste. len(L) < 6 ? Verdadeiro porque len(L) = 1.

    Então entra na 1ª iteração do while.

    Na 1ª iteração é feito L.append(L[-1]*len(L)) = L.append(1 * 1) = L.append(1) = [1, 1].

    Na 2ª iteração é feito L.append(L[-1]*len(L)) = L.append(1 * 2) = L.append(2) = [1, 1, 2].

    Na 3ª iteração é feito L.append(L[-1]*len(L)) = L.append(2 * 3) = L.append(6) = [1, 1, 2, 6].

    Na 4ª iteração é feito L.append(L[-1]*len(L)) = L.append(6 * 4) = L.append(24) = [1, 1, 2, 6, 24].

    Na 5ª iteração é feito L.append(L[-1]*len(L)) = L.append(24 * 5) = L.append(120) = [1, 1, 2, 6, 24, 120].

    A 6ª iteração do while não ocorre porque a essa altura len(L) < 6 deixa de ser verdade pois len(L) = 6. E a nossa lista L mutável ao final será [1, 1, 2, 6, 24, 120].