如何在Python中编写一个求和的循环
我正在尝试写一个循环,来计算以下数字序列的总和: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 的一个内置函数。你可以把这个变量叫做 result
、my_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)