0

の合計を計算したい

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で反復可能な関数を作成するにはどうすればよいですか?

4

3 に答える 3

11

あなたが欲しいのはこれです:

print(sum(decimal.Decimal(1) / i for i in range(1, 31)))

コードが機能しない理由は、 (を使用して) 1つの 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
于 2009-05-10T18:19:59.380 に答える
3

あなたが書く:

var=decimal.Decimal(1/i)

'i'はその時点で定義されていないので、これは奇妙です。どうですか:

one = decimal.Decimal( "1" )
total = decimal.Decimal( "0" )
for i in range( 1, 31 ):
    total += one / decimal.Decimal( "%d" % i )
于 2009-05-10T18:22:50.967 に答える
2

あなたの間違いは、それdecimal.Decimal(4)は関数ではなく、オブジェクトです。


ところで: Fractions (Python 2.6) モジュールが本当に必要なようです。

于 2009-05-10T18:31:57.240 に答える