2015-09-26 5 views
2

Так что мне трудно понять, как это написать. В той части, с которой у меня возникают проблемы, вы пытаетесь найти способ найти любое совпадение, которое меньше максимальной стоимости, и я не могу понять, как найти значения itemtype и max cost в списке в другом списке.Python: Найдите элемент в списке

Вопрос: Найти элемент

Когда пользователь выбирает 2, чтобы найти элемент, они должны быть предложено с типом элемента, и максимальную цену, которую они готовы заплатить за пункт. Затем ваш код должен выполнить поиск в списке и вернуть первый элемент с правильным типом и стоимостью, которая меньше или равна
цена, которую заплатит пользователь.

В ваших приглашениях используйте следующий текст: «Введите тип товара-b, m, d, t, c:» < - эти параметры являются единственными параметрами для типа элемента. «Введите максимальную стоимость пункта:»

Например, если пользователь вводит б и 50, они хотят велосипед и готовы платить до
$ 50 за это.

Ваша программа должна найти первый велосипед в списке, который продается за 50 долларов или меньше.
Если совпадение найдено, печать «Продано за»

Используйте следующий оператор печати: печати «Продано», ItemType, «за», 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

Итак, вы хотите выяснить, есть ли тип элемента в a и, если тип находится в a, посмотрите, находится ли введенный максимум ниже целого числа, сохраненного в списке? – BigZ

+0

Этот словарь криков –

+0

Ваш лучший первый шаг - превратить 'a' в словарь, например' {'a': [10, 30, 50], 'b': [22, 23, 82], ...} ' , После этого ваша логика проста: 1) посмотрите, есть ли у вас какие-либо элементы в значении для 'type', и если это так), проверьте,' '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 

Bisect воля найти цену в списке в O(log n) раз, если элемент в индексе возвращается с bisect равен < = у нас есть продажа, поэтому мы выводим сообщение и удаляем товар, если он не тогда, когда пользователь дешев и не может позволить себе наш высокий качественные предметы, и мы показать им самый дешевый доступный.

Вам РБП нужно обрабатывать случай, когда пользователь вводит либо что-то не в нашем магазине или что-то, что не может быть приведен к междунар, try/except и while цикл будет делать это за вас, что я оставлю в качестве упражнения для себя.

+0

Удивительный! Спасибо за помощь. –

Смежные вопросы