使用Function和For循环获取数字总和

时间:2015-09-02 18:20:33

标签: python function for-loop

我想定义一个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循环来执行此求和,并且必须使用sum变量,该变量在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”循环来完成此操作? 我是否正确假设"for loop"应该嵌套在"sumAll"函数中?

我已尝试多次使用for循环执行此操作,并且我不断获得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

3 个答案:

答案 0 :(得分: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   

答案 1 :(得分: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;由于nn+1均为偶数,因此总是一个整数;感应证明是通常是数学学生学习归纳的第一个例子......)。

答案 2 :(得分:0)

您将收到sum(1、2、3、4)错误
TypeError:最多2个参数的总和,为4

sum((1, 2, 3, 4)) # works cuz tuple inside
sum([1, 2, 3, 4]) # works cuz list inside

因此,函子将需要将元素收集到元组中,例如

numbers = 1, 2, 3, 4
print(sum(numbers)) # already a tuple so works

在参数中使用*可以将调用者的参数收集到一个元组中。 *使调用方提供的任意数量的arg无效,并将它们转换为元组参数。

def sumall(*args):
    return sum(args)
print(sumall(1))
print(sumall(1, 2))
print(sumall(1, 2, 3))
print(sumall(1, 2, 3, 4))

产生预期的答案。图片来源:作者Downey在Think Python(2016)的第12章中要求使用此练习解决方案