【发布时间】:2021-03-18 02:55:00
【问题描述】:
我们提供购买 3 种洗发水并使用以下任何一种免费获得最便宜的优惠:
d = {'Shampoo (Small)' : 2.00,
'Shampoo (Medium)' : 2.50,
'Shampoo (Large)' : 3.50}
鉴于篮子包含:
basket_3 = {'Shampoo (Large)' : 3,
'Shampoo (Medium)' : 1,
'Shampoo (Small)': 2}
答案应该是:
sub-total: £17.0
discount: £5.5
total: 11.5
客户免费获得 1 个大号和 1 个小号洗发水。
我试图做的是实现一个函数来找出哪些洗发水可以免费获得
def basket(basket):
# calculates subtotal from function
print("Subtotal: ","%.2f" % subtotal(basket))
print("Discount: ","%.2f" % (subtotal(basket) - discounted(basket)))
print("Total: ","%.2f" % discounted(basket))
return basket
def subtotal(basket):
d = {}
for item,qty in basket.items():
price = data[item]
d[item]=(qty*price)
return sum(d.values())
def discounted(basket):
basket = offers(basket)
d = {}
for item,qty in basket.items():
price = data[item]
d[item]=(qty*price)
return sum(d.values())
def offers(basket):
d = {}
for item,qty in basket.items():
if 'Shampoo' in item:
qty = shampoo(qty)
d[item]=qty
else:
d.update({item:qty})
return d
def shampoo(purchased, buy=3, free=1):
pack = buy - free
buy_packs = purchased // pack
buy_individual = purchased % pack
return buy * buy_packs + buy_individual
但我的结果是
Subtotal: 17.00
Discount: -5.50
Total: 22.50
哪个得到了正确的折扣,但总数应该低于小计。
我该如何解决这个问题?
【问题讨论】:
-
shampoo函数似乎无法正确计算数量。它目前正在为Shampoo (Large)返回 4 件商品,为Shampoo (Medium)返还 1 件商品,为Shampoo (Small)返还 3 件商品。buy * buy_packs + buy_individual背后的逻辑是什么?问题很可能出在该函数中。结果discounted(basket)返回 22.5 这没有意义,因为它不应该大于subtotal -
我是从另一个 stackoverflow 答案中得到的,所以不确定。你知道如何解决吗? @乌龟
-
我对报价有疑问:1 支洗发水(大号)是免费的,因为您要购买其中的 3 支,对吗?在另一种情况下是免费的 1 个洗发水(小),因为您将剩余的 2 个中号 + 1 个小号组合在一起(因此小号最便宜)?
-
是的,这就是 OP 所声称的。我现在可以看到它是如何工作的。代码看起来仍然是颠倒的。
-
是的,你没看错
标签: python python-3.x logic