我想定义一个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
答案 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
;由于n
或n+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章中要求使用此练习解决方案