Python:在列表中找到一个项目
所以我很难搞清楚如何写这个。我遇到困难的部分是试图找出找到任何小于最大成本的匹配的方法,并且我无法弄清楚如何在另一个列表的列表中找到itemtype和max cost值。Python:在列表中找到一个项目
的问题:找到一个项目
当用户选择2找到一个项目,他们应与项目类型提示,并 他们愿意支付该项目的最高价格。然后,您的代码应该搜索 列表,并返回第一个具有正确类型的项目,其成本小于或等于用户将支付的价格
。
在提示中使用以下文本: “输入项目类型-b,m,d,t,c:”< - 这些是项目类型的唯一选项。 “输入最大项目成本:”
例如,如果用户的B型和50,他们想要一辆自行车,并愿意支付高达
$ 50为它。
您的程序应该在列表中找到第一辆售价为50美元或更少的自行车。
如果发现匹配,打印“卖了”
使用下面的print语句: 打印“已售出”,项目类型“为”,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会被用户改变。 谢谢。
使用字典,存储价值的物品如钥匙和列表,你可以使用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
开张会在O(log n)
时间内找到列表中的价格,如果指数中的项目从对分中返回,则为< =我们有销售,所以我们输出消息并删除该项目,如果不是那么用户便宜且无法承受我们的高价优质的项目和我们向他们展示最便宜的可用。
您LSO需要当用户在我们的商店或东西不能被转换为int进入任何事情不处理的情况下,try/except
和while
循环会为你做的,我会留下一个练习为自己。
太棒了!谢谢您的帮助。 –
所以你想弄清楚,如果项目类型是在一个和,如果类型是在一个,看看输入的最大值是否低于列表中存储的整数? – BigZ
This尖叫词典 –
你最好的第一步是把'a'变成像'{'a':[10,30,50],'b':[22,23,82],...} 。你的逻辑很简单:1)看看'type'的值是否有剩余,如果是的话2)检查'dict [type] [0]' sberry