无法在Python中生成iterable decimal函数
我想计算一下无法在Python中生成iterable decimal函数,python,iteration,sum,Python,Iteration,Sum,我想计算一下 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中实现iterable函数?您需要的是: print(sum(decimal.Decimal(1) / i for i
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中实现iterable函数?您需要的是:
print(sum(decimal.Decimal(1) / i for i in range(1, 31)))
代码不起作用的原因是您试图迭代一个十进制
实例(通过使用sum
)。此外,您对var
的定义无效。你的意图可能是这样的:
var = lambda i: decimal.Decimal(str(1.0 / i))
(注意str
,Decimal
浮点参数的使用)。但即使这样,您的循环也无法工作,因为在循环中使用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)))
但是,如所述,提供了一种可产生分数答案的替代方法:
>>> 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 )
您的错误是,
decimal。decimal(4)
不是一个函数,而是一个对象
顺便说一句:看起来(Python2.6)模块才是您真正需要的。我同意分数。Decimal只是用来表示有限的以10为基数的小数。它不能精确地表示1/3这样的东西。那为什么要用它呢?分数就是你想用分数做算术的东西。