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