使用while语句求和连续整数
例子:
- sum_from_to(3, 7) 的结果应该是 18(也就是 3+4+5+6)。
- sum_from_to(3, 3) 的结果应该是 0。
def sum_from_to(start, end):
"""Return the sum of the integers from start up to but not including end.
sum_from_to(int, int) -> int
"""
while
我该怎么开始做这个呢?
3 个回答
1
首先,如果这不是一个作业题,那答案就很简单:
def sum_from_to(start, end):
return sum(range(start, end))
在Python 2.x中,使用 xrange
代替 range
。就这么简单。
如果这是一个作业程序,而且你不被允许使用 sum
、range
,甚至连 for
循环都不能用(这让我不禁想,为什么他们还要假装教你Python,但无所谓……),那么这里有个框架:
def sum_from_to(start, end):
total = 0
value = start
while ???:
total = ???
value = ???
return total
你需要填充“???”的部分。你怎么让 value
一直加1,直到它达到 end
?你对 total
做什么才能让它保持一个累加的总和?其实就这些。
再给你一个提示:
你可以用一个变量的旧值来计算新值。例如:
i = 1
i = i * 2 # now it's 2
i = i * 2 # now it's 4
1
其实有个更简单的办法。
sum(range(3, 7))
这个方法不会把最后一个值算进去,所以你能得到你想要的结果。
2
为了好玩,你可以纯粹用数学的方法来解决这个问题,使用欧拉求和公式:
def sum_from_to(start,stop):
return ((stop-1)*stop-(start-1)*start)/2
sum_from_to(3,7) #18
这样做的好处是计算起来非常简单。没有循环,没有范围,也不需要数组等等。相比之下,其他的方法计算起来就比较耗费资源了。