【问题标题】:How do I get the total of a sequence of rational numbers?如何获得有理数序列的总数?
【发布时间】:2022-01-19 22:14:18
【问题描述】:

我有一个小数列表来获取它们的总数。我不允许使用除 for、while 循环之外的分数模块。有人能帮助我吗?我在自学。

这是我的问题:

编写一个循环来计算以下一系列数字的总和:

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 -n + 1) for n=1..30 则不是。

标签: python python-3.x for-loop while-loop


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 2018-11-20
    • 2013-11-18
    相关资源
    最近更新 更多