この関数の私の目標は、注文の総コストを出力することです。
{'2': '150.99', '3': '99.50', '15': '5.07'}
最初の値がID番号で、2番目の値がそのID番号を持つアイテムの価格であるような辞書を提供する関数が1つあります。したがって、アイテム番号3のコストは99ドル/ユーロ/ポンド/私の単位が何であれ、50セント/サブユニットです。
別の関数は、このように検索するアイテムIDのリストを提供します[2, 2, 3]
。ここで、任意のアイテムIDを複数回表示して、そのアイテムを複数購入していることを示すことができます。したがって、この例では、アイテム2の2つをそれぞれ150.99で購入し、アイテム3の1つを99.50で購入します。
アイテムIDのディクショナリ(価格とアイテムIDのリストを検索する)を渡して、リスト内のすべてのアイテムの合計コストを出力する関数を定義したいと思います。したがって、上記の例では、値を出力する必要があり401.48
ます(2*150.99)+99.50=401.48
。
テストとして私は試しました
test = DictionaryVariable.get('2')
print test
これにより、期待値が出力されます(したがって、この例では150.99になります)。
しかし、私のような関数を定義しようとすると
def FindPrice(dictionary, idlist):
price = 0.00
for id in idlist:
price + float(dictionary.get(id))
return price
そしてそれをこのように呼びます:
Prices = FindPrice(DictionaryVariable, IDListVariable)
print Prices
動作していません-dictionary.get(id)
パーツが返さNone
れているようです(floatではなくstrにすることでテストしました)ので、「TypeError:float()引数は文字列または数値である必要があります」というエラーがスローされます。リストからアイテムIDを入力する他の方法を使用する必要があると思いますが、その方法がどうなるかわかりません。なぜdictionary.get(id)
リターンするのかはわかりNone
ませんが、それでもDictionaryVariable.get('2')
私が期待する価値を提供します。
編集:整数や浮動小数点数ではなく、辞書で文字列を使用していることを指摘した有益な投稿のおかげで、これを機能させることができました:
def FindPrice(dictionary, idlist):
Price = sum(float(dictionary.get(x,0)) for x in idlist)
return Price
Prices = FindPrice(DictionaryVariable, FunctionThatMakesListofIDs('FileToGetIDsFrom.xml'))
print Prices