2015-09-02 2 views
-4

Я хочу определить функцию, sumAll(n), что sums all numbers from 1 to n.Получить сумму чисел, используя функцию и для цикла

Например, когда я звоню sumAll(10) должен вернуть answer 55 ...

Потому что:

1+2+3+4+5+6+7+8+9+10 = 55 

sumAll Функция должно использовать цикл для выполнения этого суммирования, и она будет иметь использовать переменную суммы, которая увеличивается по значению по каждой итерации цикла for.

У меня есть рабочая функция, которая не использует цикл for, но мне нужно знать, как использовать цикл for, чтобы это сделать.

Вот рабочая программа:

def sumAll(n): 
    if n == 0: 
     return 0 

    return n + sumAll(n - 1) 

number = int(raw_input("Please enter a number: \n")) 

print ("The answer is: ") + str(sumAll(number)) 

Как использовать «для» цикла для достижения этой цели? Я вправе предположить, что "for loop" должен быть вложен в функцию "sumAll"?

Я много раз, чтобы сделать это, используя цикл пытался, и я продолжаю получать infinite result and errors ...

Вот мой код:

def sumAll(n): 
    y = n + sumAll(n -1) 
    return y 

num = int(raw_input("Please enter a number") 
for n in range(num): 
    num = sumAll(num) 
    print num 
+0

Вы пытались использовать 'сумму()'? Или что-нибудь, что связано с циклом 'for'? –

+1

См. [Учебник] (https://docs.python.org/3/tutorial/controlflow.html # for-statements) для примеров использования оператора '' '' for''' '(https://docs.python.org/3/reference/compound_stmts.html#for). – wwii

+5

Вы серьезно придумали решение для рекурсии для этого, в комплекте с базовым корпусом, но вы не знаете, как добавить числа 1-10 в цикл for? –

ответ

1

По for loop

def sumAll(n): 
    sum_all = 0 
    for i in range(1, n+1): 
     sum_all = sum_all + i 
    return sum_all 

number = int(raw_input("Please enter a number: \n")) 

print ("The answer is: ") + str(sumAll(number)) 

Выход:

Please enter a number: 
10 
The answer is: 55 

Вы можете также использовать list Comprehension:

print sum([i for i in range(number+1)]) 

Выход:

55 

Вы также можете использовать математическую формулу серии:

def sumAll(n): 
    return n * (n + 1)/2 
+0

Это не отвечает на вопрос OP. Они хотят сделать это в функции. –

+0

Нет, это еще не то, о чем просил ОП. –

+0

@MorganThrapp Это нормально? –

0

вы даже можете сделать это без цикла:

def sumAll(n): 
    return sum(range(1,n+1)) 

print(sumAll(10)) # -> 55 

, если вы настаиваете на использовании цикла:

def sumAll(n): 
    s = 0 
    for i in range(1,n+1): 
     s += i 
    return s 

но математическое решение просто:

def sumAll(n): 
    return n * (n + 1)/2 
    # in python 3: 
    # return n * (n + 1) // 2 

(есть n элементы со средним значением (n+1)/2; это всегда будет целым числом, так как либо n, либо n+1 равно; доказательство по индукции часто является первым примером, когда учащиеся математики узнают об индукции ...).

+0

спасибо за ответ, я ценю его! –

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