我对这个函数的目标是输出订单的总成本。
我有一个函数可以给我一个字典{'2': '150.99', '3': '99.50', '15': '5.07'}
,比如第一个值是 ID 号,第二个值是具有该 ID 号的商品的价格。因此,第 3 项商品的价格为 99 美元/欧元/英镑/无论我的单位是什么,以及 50 美分/子单位。
另一个函数为我提供了一个项目 ID 列表,以便像这样查找,[2, 2, 3]
其中任何项目 ID 都可以出现多次,以表明我购买了多个该项目。因此,在本例中,我将以 150.99 的价格购买 2 件商品 2,并以 99.50 的价格购买 1 件商品 3。
我想定义一个函数,让我将项目 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
(我已经通过将其设为 str 而不是 float 进行了测试),因此它会引发错误,指出“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