2015-09-26 63 views
2

所以我很難搞清楚如何寫這個。我遇到困難的部分是試圖找出找到任何小於最大成本的匹配的方法,並且我無法弄清楚如何在另一個列表的列表中找到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會被用戶改變。 謝謝。

+0

所以你想弄清楚,如果項目類型是在一個和,如果類型是在一個,看看輸入的最大值是否低於列表中存儲的整數? – BigZ

+0

This尖叫詞典 –

+0

你最好的第一步是把'a'變成像'{'a':[10,30,50],'b':[22,23,82],...} 。你的邏輯很簡單:1)看看'type'的值是否有剩餘,如果是的話2)檢查'dict [type] [0]'<=進入的數量。 – sberry

回答

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 

開張會在O(log n)時間內找到列表中的價格,如果指數中的項目從對分中返回,則爲< =我們有銷售,所以我們輸出消息並刪除該項目,如果不是那麼用戶便宜且無法承受我們的高價優質的項目和我們向他們展示最便宜的可用。

您LSO需要當用戶在我們的商店或東西不能被轉換爲int進入任何事情不處理的情況下,try/exceptwhile循環會爲你做的,我會留下一個練習爲自己。

+0

太棒了!謝謝您的幫助。 –

相關問題