Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在Python中生成iterable decimal函数_Python_Iteration_Sum - Fatal编程技术网

无法在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这样的东西。那为什么要用它呢?分数就是你想用分数做算术的东西。