所以我无法弄清楚如何写这个。我遇到麻烦的部分是试图找出一种方法来找到任何小于最大成本的匹配,我无法弄清楚如何在另一个列表的列表中找到itemtype和max cost值。
问题:找一个项目
当用户选择2来查找项目时,应该提示他们使用项目类型,和
他们愿意为物品支付的最高价格。然后你的代码应该搜索
列出并返回具有正确类型的第一个项目以及小于或等于
的成本
用户将支付的价格。
在提示中使用以下文字: “输入项目类型-b,m,d,t,c:”< - 这些是项类型的唯一选项。 “输入最大项目费用:”
例如,如果用户键入b和50,他们想要一辆自行车并愿意支付 50美元。
您的计划应该会在列表中找到售价50美元或以下的第一辆自行车 如果找到匹配项,请打印“已售出”
使用以下print语句: 打印“已售出”,itemType,“for”,itemCost 其中itemType和itemCost是存储项目类型及其成本的变量。
itemType是以下之一:自行车,微波炉,梳妆台,卡车或鸡肉。
itemCost是实际的项目成本,而不是用户愿意支付的费用。
然后应该从列表中删除该项目 如果找不到该项,则不执行任何操作。
这是我到目前为止所做的:
p=2
a=[['b', 40], ['c', 330], ['m', 50], ['d', 70], ['t', 85]]
while p == 2:
if len(a) > 0:
itemtype = raw_input("Enter the item type-b,m,d,t,c:")
maxcost = raw_input("Enter the maximum item cost:")
x = [itemtype, maxcost]
注意:当我弄清楚如何做时,列表a只是一个参考。真实的a将由用户改变。 感谢。
答案 0 :(得分:2)
使用字典,将项目存储为键和值列表,您可以使用bisect有效地找到最接近用户的价格:
def purchase():
from bisect import bisect_left
data = {"b": [10, 20, 30, 40], "c": [100, 200, 330], "m": [20, 40, 50], "d": [70, 80, 90], "t": [50, 85, 100]}
for _ in range(2):
item_type = raw_input("Enter the item type-b,m,d,t,c:")
max_cost = int(input("Enter the maximum item cost:"))
v = data[item_type]
ind = bisect_left(v, max_cost, hi=len(v) - 1)
if v[ind] <= max_cost:
print("Sold for {}".format(v[ind]))
v.remove(v[ind])
else:
print("Sorry, cheapest is {}".format(v[0]))
演示:
In [2]: purchase()
Enter the item type-b,m,d,t,c:b
Enter the maximum item cost:10
Sold for 10
Enter the item type-b,m,d,t,c:b
Enter the maximum item cost:10
Sorry, cheapest is 20
bisect将在O(log n)
时间内找到列表中的价格,如果索引中的项目从bisect返回&lt; =我们有销售,那么我们输出消息并删除该项目,如果不是然后用户便宜而且买不起我们的高品质商品,我们向他们展示最便宜的商品。
当用户输入不在我们商店的东西或者无法转换为int的东西时,你还需要处理这种情况,try/except
和while
循环会为你做这件事,我将为自己留下一个练习。