如何获得有理数序列的总和?
How do I get the total of a sequence of rational numbers?
我有一个小数列表来计算它们的总和。除了 for, while 循环,我不允许使用 fraction 模块。有谁可以帮助我吗?我在自学。
这是我的问题:
Write a loop that calculates the total of the following series of numbers:
1/30 + 2/29 + 3/28 + ... + 30/1
更新
这是我写的代码:
starting_number = 1 / 30
ending_number = 30/1
total = 0.0
for number in range(starting_number, ending_number, starting_number + 1 / ending_number -1):
total += number
print(total)
这是输出:
Traceback (most recent call last):
File "C:\Users\jimsrc\Desktop\repo\New folder\test2.py", line 4, in <module>
for number in range(starting_number, ending_number, starting_number + 1 / ending_number -1):
TypeError: 'float' object cannot be interpreted as an integer
Process finished with exit code 1
我认为您正试图使您的 range()
调用比它需要的(或它支持的)复杂得多。
让我们接受你的想法,但将工作移到循环中:
n = 30
total = 0
for i in range(1, n+1):
total += i/(n+1-i)
print(total)
这给了我们 93.84460105853213
这将接近您寻求的价值。它可能是也可能不是正确的答案,具体取决于您期望 float
的行为方式。参见:Is floating point math broken?
一旦您理解了这里发生的事情,这并不是@wjandrea 建议的简化的巨大飞跃。
n = 30
total = sum(i/(n+1-i) for i in range(1, n+1))
print(total)
还给你:93.84460105853213
我有一个小数列表来计算它们的总和。除了 for, while 循环,我不允许使用 fraction 模块。有谁可以帮助我吗?我在自学。
这是我的问题:
Write a loop that calculates the total of the following series of numbers:
1/30 + 2/29 + 3/28 + ... + 30/1
更新
这是我写的代码:
starting_number = 1 / 30
ending_number = 30/1
total = 0.0
for number in range(starting_number, ending_number, starting_number + 1 / ending_number -1):
total += number
print(total)
这是输出:
Traceback (most recent call last):
File "C:\Users\jimsrc\Desktop\repo\New folder\test2.py", line 4, in <module>
for number in range(starting_number, ending_number, starting_number + 1 / ending_number -1):
TypeError: 'float' object cannot be interpreted as an integer
Process finished with exit code 1
我认为您正试图使您的 range()
调用比它需要的(或它支持的)复杂得多。
让我们接受你的想法,但将工作移到循环中:
n = 30
total = 0
for i in range(1, n+1):
total += i/(n+1-i)
print(total)
这给了我们 93.84460105853213
这将接近您寻求的价值。它可能是也可能不是正确的答案,具体取决于您期望 float
的行为方式。参见:Is floating point math broken?
一旦您理解了这里发生的事情,这并不是@wjandrea 建议的简化的巨大飞跃。
n = 30
total = sum(i/(n+1-i) for i in range(1, n+1))
print(total)
还给你:93.84460105853213