Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Calculo da soma de um numero e do seu antescessor

Bom dia a todos,

Após terminar o curso de Python 3 fui buscar exercícios para consolidar meus conhecimentos. Encontrei este no pynative:

"Write a program to iterate the first 10 numbers and in each iteration, print the sum of the current and previous number." Abaixo segue o output esperado.

Printing current and previous number sum in a range(10)
Current Number 0 Previous Number  0  Sum:  0
Current Number 1 Previous Number  0  Sum:  1
Current Number 2 Previous Number  1  Sum:  3
Current Number 3 Previous Number  2  Sum:  5
Current Number 4 Previous Number  3  Sum:  7
Current Number 5 Previous Number  4  Sum:  9
Current Number 6 Previous Number  5  Sum:  11
Current Number 7 Previous Number  6  Sum:  13
Current Number 8 Previous Number  7  Sum:  15
Current Number 9 Previous Number  8  Sum:  17

Minha resposta foi:

for number in range(0, 11):
    soma = number + previous_number
    print("Current number {} Previous number {} Sum is {}".format(number, (number-1), soma ))

O código que escrevi tem o problema de incluir como primeiro resultado o "-1" que não aparece no output esperado do problema. O quiz tem como resposta:

for i in range(1, 11):
    x_sum = previous_num + i
    print("Current Number", i, "Previous Number ", previous_num, " Sum: ", previous_num + i)
    previous_num = i

Bem, entendi o porquê de usar o for e range. Contudo, voei no porquê foi necessário declarar (segundo as variáveis que escolhi) previous_numer = number. Não conseguiria replicar isso numa situação similar. Alguém poderia me explicar?

3 respostas
solução!

Oi Fábio. Eu manipulei o código do teu gabarito para se adequar à resposta esperada. Agora você consegue rodá-la e obter o resultado:

for number in range(0, 10):
    previous_num = number - 1
    soma = previous_num + number
    if number == 0:
        previous_num = number
    print("Current Number", number, "Previous Number ", previous_num, " Sum: ", previous_num + number)

Eu deixei claro dentro do loop o que é a variável previous_num (por uma questão de facilidade/legibilidade) e criei um condicional para imprimir a primeira iteração como completamente nula (assim como o teu gabarito).

Nesse condicional (if) utilizei o *previous_num = number * puramente por uma questão de adequação ao pedido pelo teu enunciado. Caso contrário, não seria necessário e vc poderia ter mantido a ocorrência -1 sem problemas.

Ótimo! Acho que entendi. Vejamos... colocar previous_numer = number dentro do loop garante que o primeiro print dessas duas variáveis seja "0" e a partir daí a o loop segue como programado.

Somente porque vc condicionou dessa forma:

SE number for igual a zero

o número anterior será igual ao número da iteração atual

Como eu disse, vc só precisou fazer essa "gambiarra" pq teu enunciado pediu a primeira iteração totalmente nula. Caso contrário, não seria necessário. :)