SóProvas


ID
1770610
Banca
FGV
Órgão
PGE-RO
Ano
2015
Provas
Disciplina
Programação
Assuntos

Analise o código Python a seguir.

S=0

C=1

while C < 7:

      D=4

      while D > 0:

            S=S+C+D

            D=D -1

        C=C +1

print S

O código que produz resultado idêntico ao que é produzido pelo código acima é: 

Alternativas
Comentários
  • Resposta: D - segue uma explicação da função range().


    Em Python, é muito comum usarmos a seguinte estrutura para realizar uma repetição baseada em um contador:

    for i in range(0, 10):

    print i,

    A função range(x, y) gera uma lista de números inteiros de x até y (sem incluir o segundo). Assim, range(0, 10), gera a seguinte lista:

    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


    Desse modo, a variável i é iterada sobre essa lista, através da estrutura de repetição for. O trecho de código:

    for i in range(0, 10):

    print i,


    https://pythonhelp.wordpress.com/2011/10/05/range-vs-xrange/

  • Resposta: Letra D

    A função range tem 2 assinaturas:

    range(stop) - conta de 0 (incluso) até stop (não-incluso). Exemplo: a = range(3) # [0, 1, 2] range(start, stop [,step]) - conta de start (incluso) até stop (não-incluso). Se step for fornecido, faz a iteração de step em step. Exemplos: a = range(1, 9, 2) # [1, 3, 5, 7] 

    No código, temos 2 laços.

    O primeiro (mais externo) itera a partir de C = 1, enquanto C < 7, e realiza C=C+1. Esse loop vai iterar para os valore [1, 2, 3, 4, 5, 6], e pode ser substituído por for C in range (1, 7).

    O segundo (mais interno) itera a partir de D = 4, enquanto D > 0, e realiza D=D-1. Esse loop vai iterar para os valores [4, 3, 2, 1], e pode ser substituído por for D in range (4, 0, -1). 

    Dessa forma, temos:

      S=0
      for C in range(1,7):
          for D in range(4,0,-1):
              S=S+C+D
      print S

    Prof. Judah Reis

  • Esse é o tipo de questão que podemos e devemos usar o teste de mesa para resolver.

    Primeiramente iremos fazer um teste de mesa para entender o código do enunciado.

     

    As variáveis S e C são inicializadas com os valores 0 e 1 respectivamente. 

    S 0

    C 1

    D

    Como C = 1 é menor que 7, ele entra no while e faz D=4. 

    S 0

    C 1

    D 4

    Na linha 5 do código aparece um while aninhado. Como a condição de permanência nesse while aninhado é D > 0 e o D neste ponto vale 4 ele entra no while D > 0 e faz as operações S=S+C+D e D=D-1.

    S 0 5

    C 1

    D 4 3

    Agora D = 3 e a condição de permanência no while D > 0 permanece válida fazendo com que seja feita mais uma volta.

    S 0 5 9

    C 1 1 1

    D 4 3 2

    Agora D = 2 e a condição de permanência no while D > 0 permanece válida fazendo com que seja feita mais uma volta.

    S 0 5 9 12

    C 1 1 1 1

    D 4 3 2 1

    Agora D = 1 e a condição de permanência no while D > 0 permanece válida fazendo com que seja feita mais uma volta.

    S 0 5 9 12 14

    C 1 1 1 1 1

    D 4 3 2 1 0

    Neste passo D = 0 e ele sai do while interior e executa a instrução C = C + 1.

    S 0 5 9 12 14

    C 1 1 1 1 1 2

    D 4 3 2 1 0

    Agora, C = 2 e, como a condição de permanência no while exterior é C < 7, ele segue para a 2a iteração desse while exterior. Nessa 2a volta, D recebe novamente o valor 4 e o while interior gira 4 vezes novamente (D = 4, D = 3, D = 2, D = 1). A cada 1 dessas 4 voltas são executadas as instruções S=S+C+D e D=D-1.

    S 0 5 9 12 14 14 20 25 29

    C 1 1 1 1 1 2 2 2 2

    D 4 3 2 1 0 4 3 2 1

    Neste passo D = 0 e ele sai do while interior e executa a instrução C = C + 1.

    S 0 5 9 12 14 14 20 25 29

    C 1 1 1 1 1 2 2 2 2 3

    D 4 3 2 1 0 4 3 2 1

    Agora, C = 3 e, como a condição de permanência no while exterior é C < 7, ele segue para a 2a iteração desse while exterior. Nessa 2a volta, D recebe novamente o valor 4 e o while interior gira 4 vezes novamente (D = 4, D = 3, D = 2, D = 1). A cada 1 dessas 4 voltas são executadas as instruções S=S+C+D e D=D-1.

    S 0 5 9 12 14 14 20 25 29 29 36 42 47

    C 1 1 1 1 1 2 2 2 2 3 3 3 3

    D 4 3 2 1 0 4 3 2 1 4 3 2 1

    Neste passo D = 0 e ele sai do while interior e executa a instrução C = C + 1.

    S 0 5 9 12 14 14 20 25 29 29 36 42 47

    C 1 1 1 1 1 2 2 2 2 3 3 3 3 4

    D 4 3 2 1 0 4 3 2 1 4 3 2 1

    Agora, C = 4 e, como a condição de permanência no while exterior é C < 7, ele segue para a 2a iteração desse while exterior. Nessa 2a volta, D recebe novamente o valor 4 e o while interior gira 4 vezes novamente (D = 4, D = 3, D = 2, D = 1). A cada 1 dessas 4 voltas são executadas as instruções S=S+C+D e D=D-1.

    S 0 5 9 12 14 14 20 25 29 29 36 42 47 47 55 52 58

    C 1 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4

    D 4 3 2 1 0 4 3 2 1 4 3 2 1 4 3 2 1

    Neste passo D = 0 e ele sai do while interior e executa a instrução C = C + 1.

    S 0 5 9 12 14 14 20 25 29 29 36 42 47 47 55 52 58

    C 1 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5

    D 4 3 2 1 0 4 3 2 1 4 3 2 1 4 3 2 1

    Agora, C = 5 e, como a condição de permanência no while exterior é C < 7, ele segue para a 2a iteração desse while exterior. Nessa 2a volta, D recebe novamente o valor 4 e o while interior gira 4 vezes novamente (D = 4, D = 3, D = 2, D = 1). A cada 1 dessas 4 voltas são executadas as instruções S=S+C+D e D=D-1.

    S 0 5 9 12 14 14 20 25 29 29 36 42 47 47 55 52 58 58 67 75 82

    C 1 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5

    D 4 3 2 1 0 4 3 2 1 4 3 2 1 4 3 2 1 4 3 2 1

    Neste passo D = 0 e ele sai do while interior e executa a instrução C = C + 1.

    S 0 5 9 12 14 14 20 25 29 29 36 42 47 47 55 52 58 58 67 75 82

    C 1 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 6

    D 4 3 2 1 0 4 3 2 1 4 3 2 1 4 3 2 1 4 3 2 1

    Agora, C = 5 e, como a condição de permanência no while exterior é C < 7, ele segue para a 2a iteração desse while exterior. Nessa 2a volta, D recebe novamente o valor 4 e o while interior gira 4 vezes novamente (D = 4, D = 3, D = 2, D = 1). A cada 1 dessas 4 voltas são executadas as instruções S=S+C+D e D=D-1.

    S 0 5 9 12 14 14 20 25 29 29 36 42 47 47 55 52 58 58 67 75 82 82 92 101 109

    C 1 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6

    D 4 3 2 1 0 4 3 2 1 4 3 2 1 4 3 2 1 4 3 2 1 4 3 2 1

    Neste passo D = 0 e ele sai do while interior e executa a instrução C = C + 1. Como C = 6, após a operação C=C+6 a variável C irá para o valor C = 7. Isso faz com que a condição de permanência no while exterior deixe de ser verdade, o que leva o algoritmo Python a executar sua última instrução: print S. Como S a esta altura vale 109, é esse o valor que é impresso na tela.

    Ufa! Isso tudo foi só para entender o enunciado.

    Vocês repararam que o código do enunciado tem 2 whiles? 1 while exterior onde a variável C varia de 1 a 6 e 1 while interior em que a variável D varia de 4 a 1. Dentro desses 2 loops aninhados, o S vai crescendo de acordo com a fórmula S=S+C+D.

    É como se cada 1 desses whiles fosse um range. O while exterior tem o mesmo comportamento que um range(1,7) (start = 1, stop = 7 não inclusive e incremento default 1). Já o while exterior tem o mesmo comportamento que um range(4,0,-1) (start = 4, stop = 0 não inclusive e incremento = -1). O que as alternativas a, b, c, d, e fazem é justamente isso. Mapear os whiles em 2 ranges.

    Das 5 alternativas, a que bate com esses 2 ranges (range(1,7) e range(4,0,-1)) e tem em seu interior a fórmula que corretamente incrementa o S=S+C+D é a alternativa D.

     

    Resposta: D

  • Em Python é comum usarmos - for i in range(0, 10):

    print i,

    para realizar uma repetição baseada em um contador, gerando uma lista através do range.

    Nesse código nós temos dois laços com o WHILE(enquanto)

    O primeiro itera a partir de C = 1, enquanto C < 7, e realiza C=C+1

    O segundo itera a partir de D = 4, enquanto D > 0, e realiza D=D-1

    1° Para (for) C in range (1,7) = A lista [1, 2, 3, 4, 5, 6]

    2º Para (for) D in range (4, 0, -1) = A lista [4, 3, 2, 1]

      S=S+C+D

    Gabarito LETRA D

  • Questão pra chutar. Não dá tempo de fazer.