レベル:初心者
「シーケンスを「float」型の非整数で乗算できない」というエラーが表示されるのはなぜですか?
def nestEgVariable(salary, save, growthRates):
SavingsRecord = []
fund = 0
depositPerYear = salary * save * 0.01
for i in growthRates:
fund = fund * (1 + 0.01 * growthRates) + depositPerYear
SavingsRecord += [fund,]
return SavingsRecord
print nestEgVariable(10000,10,[3,4,5,0,3])
ありがとうババ
for i in growthRates:
fund = fund * (1 + 0.01 * growthRates) + depositPerYear
する必要があります:
for i in growthRates:
fund = fund * (1 + 0.01 * i) + depositPerYear
0.01にgrowthRatesリストオブジェクトを乗算しています。リストに整数を掛けることは有効です(要素参照のコピーで拡張リストを作成できるようにするオーバーロードされた構文シュガーです)。
例:
>>> 2 * [1,2]
[1, 2, 1, 2]
Pythonでは、シーケンスを乗算して値を繰り返すことができます。以下に視覚的な例を示します。
>>> [1] * 5
[1, 1, 1, 1, 1]
しかし、浮動小数点数でそれを行うことはできません:
>>> [1] * 5.1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't multiply sequence by non-int of type 'float'
繰り返し処理しているリスト内のアイテムではなく、「1 + 0.01」倍のgrowthRateリストを乗算しています。 i
の名前をrate
に変更し、代わりに使用しています。以下の更新されたコードを参照してください。
def nestEgVariable(salary, save, growthRates):
SavingsRecord = []
fund = 0
depositPerYear = salary * save * 0.01
# V-- rate is a clearer name than i here, since you're iterating through the rates contained in the growthRates list
for rate in growthRates:
# V-- Use the `rate` item in the growthRate list you're iterating through rather than multiplying by the `growthRate` list itself.
fund = fund * (1 + 0.01 * rate) + depositPerYear
SavingsRecord += [fund,]
return SavingsRecord
print nestEgVariable(10000,10,[3,4,5,0,3])
この行では:
fund = fund * (1 + 0.01 * growthRates) + depositPerYear
growthRatesはシーケンス([3,4,5,0,3]
)。そのシーケンスにfloat(0.1)を掛けることはできません。そこに置きたいものはi
のように見えます。
ちなみに、i
はその変数の素晴らしい名前ではありません。 growthRate
やrate
など、より説明的なものを検討してください。
この行では:
fund = fund * (1 + 0.01 * growthRates) + depositPerYear
私はあなたがこれを意味すると思う:
fund = fund * (1 + 0.01 * i) + depositPerYear
FloatにgrowthRates(リスト)を掛けようとすると、そのエラーが発生します。
GrowthRatesはシーケンスであり(繰り返し処理を行っているのです!)、それに(1 + 0.01)を掛けます。これは明らかにフロート(1.01)です。 for growthRate in growthRates: ... * growthrate
?