如何在Python中编写一个求和的循环

1 投票
4 回答
5277 浏览
提问于 2025-04-17 20:28

我正在尝试写一个循环,来计算以下数字序列的总和:1/30 + 2/29 + 3/28 + … + 30/1。
我遇到了一些问题,因为下面的程序只显示总和为0.033333333....

def main():
  A=1
  B=30
  sum=(A/B)
  while A<=30:
      A+=1
      B-=1
  print('Total:',sum)
main()

4 个回答

0

首先,我们把一个叫做“total”的东西设定为0.0,这就像是一个空的储物箱,里面什么都没有。

接着,我们用一个循环来做事情,这个循环会从1数到30,每次加1,就像是在数数一样。

z = x / (31-x)

total += z

最后,我们会把“total”的总和打印出来,显示的格式是保留两位小数,比如说“总和是 10.00”。

2

你可能想要的代码是这样的:

def main():
    A=1
    B=30
    sume= A/B
    while B>1:
        A+=1
        B-=1
        sume += A/B
    print('Total:',sume)

main()

而且,除非你确定在程序的其他地方不会用到 sum,否则不应该覆盖它。sum 是 Python 中的一个保留字。

4

创建两个包含你想要的数字的列表,计算每个分数的值,然后把它们加起来。

sum(( a/b for a,b in zip(range(1,31),range(30,0,-1))))

4

你在每次循环中并没有往 sum 里加任何东西。你必须在

sum = sum + A / B

这个 while 循环里面加上。

不过,你得先把 sum 初始化为零:

sum = 0

注意:

不要用 sum 作为变量名,因为它是 Python 的一个内置函数。你可以把这个变量叫做 resultmy_sum 等等。

代码:

def main():
    A = 1
    B = 30
    result = 0
    while A <= 30:
        print A, B
        result += (A / B)
        A += 1
        B -= 1

    print('Total:', result)
main()

另外:

你可以看到在每一项的和中,A + B == 31,所以 B == 31 - A。因此,代码可以简化:

def main():
    A = 1
    result = 0
    while A <= 30:
        result += (float(A) / (30 - A + 1))
        A += 1
    print('Total:', result)

撰写回答