gpt4 book ai didi

python - 纠正我使用发电机或告诉我其他方式

转载 作者:太空狗 更新时间:2023-10-30 00:56:13 24 4
gpt4 key购买 nike

我有一个菜单字典项作为键,价格作为值。可能存在比单个项目便宜一点的项目组合。例如:

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'

最佳答案

谢谢大家的回复。我在某个地方使用了您的建议,现在我已经通过不同的实现方式通过相同的方法解决了它。

这是我的代码:

class Rest_Menu():
def __init__(self, menu):
self.menu = menu
self.all_price = []

def min_price(self, order, total_price=0):
"""
Return minm menu price by calculating all possible combination.
"""
if order:
for item, price in self.menu.iteritems():
if isSubset(order[0], item):
new_order = [each for each in order]
for itm in item:
try:
new_order.remove(itm)
except ValueError:
pass
self.min_price(new_order, price+total_price)
else:
self.all_price.append(total_price)
return min(self.all_price)

再次感谢。 :)

关于python - 纠正我使用发电机或告诉我其他方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20880591/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com