使用while语句求和连续整数

-2 投票
3 回答
1317 浏览
提问于 2025-04-17 19:36

例子:

  • 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。就这么简单。

如果这是一个作业程序,而且你不被允许使用 sumrange,甚至连 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

这样做的好处是计算起来非常简单。没有循环,没有范围,也不需要数组等等。相比之下,其他的方法计算起来就比较耗费资源了。

撰写回答