我想计算总和
1/1 + 1/2 + 1/3 + ... + 1/30
我运行代码失败
import decimal
import math
var=decimal.Decimal(1/i)
for i in range(1,31):
print(sum(var))
我得到错误
'Decimal' object is not iterable
如何在 Python 中创建可迭代函数?
你想要的是这样的:
print(sum(decimal.Decimal(1) / i for i in range(1, 31)))
您的代码不起作用的原因是您尝试迭代一个 Decimal
实例(通过使用sum
)。此外,您的定义var
无效。你的意图可能是这样的:
var = lambda i: decimal.Decimal(str(1.0 / i))
(注意使用str
,Decimal
不允许浮点参数)。但即便如此,您的循环也无法正常工作,因为在循环sum
内部的使用本身就存在缺陷。sum
应该在循环创建了您想要求和的所有分数之后使用。所以这将是:
print(sum(var(i) for i in range(1,31)))
print(sum(map(var, range(1, 31))))
为了完整起见,另一种方法如下:
one = decimal.Decimal(1)
unitFractions = (one / i for i in itertools.count(1))
print(sum(itertools.islice(unitFractions, 30)))
但是,正如gs所提到的,分数提供了一种产生分数答案的替代方法:
>>> unitFractions = (fractions.Fraction(1, i) for i in itertools.count(1))
>>> print(sum(itertools.islice(unitFractions, 30)))
9304682830147/2329089562800
你写:
var=decimal.Decimal(1/i)
这很奇怪,因为当时没有定义“我”。怎么样:
one = decimal.Decimal( "1" )
total = decimal.Decimal( "0" )
for i in range( 1, 31 ):
total += one / decimal.Decimal( "%d" % i )