私は、単位当たりの価格と単位数に基づいて私の株式の合計額を計算しなければなりません。このコードを(パラダイムのように)機能的なプログラムに変換するにはどうすればよいですか?
prices = {
"banana" : 4,
"apple" : 2,
"orange" : 1.5,
"pear" : 3,
}
stock = {
"banana" : 6,
"apple" : 0,
"orange" : 32,
"pear" : 15,
}
for key in prices:
print key
print "price: %s" % prices[key]
print "stock: %s" % stock[key]
total = 0
for key in prices:
total = total + prices[key]*stock[key]
print total
そして、私はこれで最後のブロックを交換することにより、より機能的なプログラムに変換しようとしました:私は、Pythonで、次のコードを持っている
def total(x):
if len(x) == 1:
return prices[prices.keys()[0]]*stock[prices.keys()[0]]
else:
return prices[prices.keys()[0]]*stock[prices.keys()[0]] + total(x[1:])
print total(prices)
上記のコードはこのエラーを取得します。
Traceback (most recent call last):
File "python", line 30, in <module>
File "python", line 28, in total
TypeError: unhashable type
私のコードをより機能的なプログラミングバージョンに修正してもらえますか?
再帰は一般的にPythonでは避けなければなりません。機能!=再帰。 –
ああ、右、 'StackOverflowError'は吸う。 – LexieHankins
??とても劇的ではない。私は、特定の言語でコードを書く方法についてのアドバイスをする場合は、一般的にパフォーマンスが低下するコンストラクトの使用を推奨すべきではないということだけです。 Pythonは再帰のために構築されておらず、新しいスタックフレームの割り当てに伴うオーバーヘッドが多く、テールコールの最適化はありません。再帰制限もあります。再帰的な実装の単純さが非再帰的な実装を上回る可能性がある、非常に深くないツリーを歩いていくような場合があります。 –