Léo*_* 준영 0 python iteration sum
我想计算总和
1/1 + 1/2 + 1/3 + ... + 1/30
Run Code Online (Sandbox Code Playgroud)
我运行代码失败了
import decimal
import math
var=decimal.Decimal(1/i)
for i in range(1,31):
print(sum(var))
Run Code Online (Sandbox Code Playgroud)
我收到了错误
'Decimal' object is not iterable
Run Code Online (Sandbox Code Playgroud)
如何在Python中创建可迭代函数?
Ste*_*202 11
你想要的是这个:
print(sum(decimal.Decimal(1) / i for i in range(1, 31)))
Run Code Online (Sandbox Code Playgroud)
您的代码不起作用的原因是您尝试迭代一个 Decimal实例(通过使用sum).此外,您的定义var无效.你的意图可能是这样的:
var = lambda i: decimal.Decimal(str(1.0 / i))
Run Code Online (Sandbox Code Playgroud)
(注意使用str,Decimal 不允许浮点参数).但即使这样你的循环也行不通,因为循环sum 内部的使用本质上是有缺陷的.sum应该在循环创建了要求求和的所有分数之后使用.所以这将是:
print(sum(var(i) for i in range(1,31)))
print(sum(map(var, range(1, 31))))
Run Code Online (Sandbox Code Playgroud)
为了完整起见,另一种方法是:
one = decimal.Decimal(1)
unitFractions = (one / i for i in itertools.count(1))
print(sum(itertools.islice(unitFractions, 30)))
Run Code Online (Sandbox Code Playgroud)
然而,正如gs所提到的,这些分数提供了一种替代方法,可以产生一个分数答案:
>>> unitFractions = (fractions.Fraction(1, i) for i in itertools.count(1))
>>> print(sum(itertools.islice(unitFractions, 30)))
9304682830147/2329089562800
Run Code Online (Sandbox Code Playgroud)