2016-11-14 3 views
1

Я застрял на вопросе, где мне нужно вернуть сумму всех чисел в пределах 10 семян от числа, введенного пользователем (включительно). Например, если число равно 1, то это будет 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45. До сих пор у меня есть:Loop для возврата суммы целых чисел

def temp(n1): 

    seed = n1 
    counter = 0 
    while counter < 9: 
     n1 += 1 
     counter+= 1 
return n1 

Я оценил бы никакого объяснения, как почему мой код не работает и помогает в исправлении моего кода.

+0

python 2.7 Я считаю, – Jessica

+0

Пожалуйста, объясните проблему. Вы получаете сообщение об ошибке или ваша программа производит неверный результат? – thefourtheye

ответ

2

В коде, вы добавляете 1 каждый раз, когда вы должны добавлять счетчик плюс 1 (так как вы должны быть увеличивающейся быть один более каждый раз):

def temp(n1): 
    n1 -= 1      <-- HERE 
    counter = 0 

    while counter < 9: 
     n1 += counter + 1   <-- HERE 
     counter += 1 

    return n1 

Кроме того, вам нужно сначала вычесть один из n1, чтобы компенсировать тот факт, что мы должны добавлять 0 на 0-ю итерацию.

На боковой ноте вам не нужна переменная seed, я предполагаю, что это было из предыдущих конструкций алгоритма.

Это создает правильные результаты, как и следовало ожидать:

>>> temp(1) 
45 

Альтернативным способом было бы использовать for и range. Решение для проблемы «любой другой номер» с использованием for и range появляется здесь:

def temp(n1): 
    n1 -= 1 

    for counter in range(1, 11, 2): # We use 11 instead of 9 because we want to *stop* on 11 (9 is inclusive) 
     n1 += counter 

    return n1 
+0

Это работает, спасибо! Не могли бы вы немного уточнить строку «n1 + = counter + 1»? Мне никогда не приходилось кодировать, где у обеих сторон есть +, и я думаю, что это меня путает. – Jessica

+0

@Jessica Сначала вычисляется вторая '+', поэтому она выводится на 'n1 + = (counter + 1)', где 'counter + 1' добавляется в' n1'. – Majora320

+0

Спасибо! последний вопрос, не могли бы вы написать, как изменился бы код, если бы мне пришлось получить сумму каждого другого номера? – Jessica

2

Ответ @ Majora320 правильно и объясняет, почему ваш код не работает. Но liitle более кратким решением было бы

def temp(n): 
    seed = 10 
    return ((seed * (seed-1))/2) + (n-1) 

print temp(1) 
print temp(10) 
print temp(11) 
print temp(12) 

О.П.

45 
54 
55 
56 

В основном это принять продвижение mathemetical уравнение семян * (семя-1)/2, чтобы добавить порядковый номер, начиная с 1. Но так как ваша база no может быть больше 1, я добавил (n-1), чтобы отрегулировать это смещение.

Смежные вопросы