我有一个菜单 dict 项目作为键和价格作为值。可能存在比单个项目便宜一点的项目组合。例如:
menu = {
('burger',) : 5.00,
('pizza',) : 12.00,
('coke',) : 4.00,
('macpuff',) : 4.00,
('pasta',) : 3.00,
('french_fries',) : 2.00,
('burger', 'coke', 'french_fries') : 10.00,
('pizza', 'coke') : 15.00,
}
现在假设我订购了一些物品,那么输出将是给定订单的最小数量:
I/P > burger, coke
O/P > 9 (5.00 + 4.00)
I/P > burger, coke, french_fries
O/P > 10.00
I/P > pizza, coke, french_fries
O/P > 17.00 (15.00 + 2.00)
这是我尝试的所有价格的代码,我将用作生成器:
def isSubset(a, b):
"""
compare two iterable and return true if first is subset of second
"""
b = list(b)
if not hasattr(a, '__iter__'):
a = [a]
for each in a:
try:
b.remove(each)
except ValueError:
return False
return True
def rest_min_price(order):
if order:
for item, price in menu.iteritems():
if isSubset(order[0], item):
new_order = order[1:]
for itm in item:
try:
new_order.remove(itm)
except ValueError:
pass
yield price + rest_min_price(new_order)
但是当我运行它时它说类型错误:
for each in rest_min_price(order_item):
print each
TypeError: unsupported operand type(s) for +: 'int' and 'generator'