の合計を計算したい
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)))
コードが機能しない理由は、 (を使用して) 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
あなたが書く:
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 )