2016-03-03 2 views
-1

Так что мне дано меню и рейтинг продуктов питания, мне нужно создать структуру данных, затем создать функцию getInfo и findCheapest.конвертировать в произвольное число входов при нечувствительности к регистру

getInfo (item) занимает 1 позицию и распечатывает свою цену и рейтинги.
findCheapest (item1, item2) занимает 2 предметов, проверяет, находятся ли предметы в меню и дает самый дешевый. Я написал это далеко здесь, где я борюсь.

как сделать все входные регистры незаметными для обеих функций, но все же вернуть правильно отформатированные слова. Например:

GetInfo («TEA») должен возвращать: чай- цена: 7. Оценка: 4

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

Вторая часть, над которой я изо всех сил стараюсь найти функцию получения чести, как сделать ее так, чтобы она могла принимать произвольное количество значений и все еще печатать самые дешевые, не меняя структуру данных слишком много.

Итак, я реализовал функцию formatText (item), которая преобразует в правильный формат.

Вот код:

menu= {"Tea", "Coffee", "Cookie", "Chips"} 

price={ 

    "Tea": 7, 
    "Coffee": 5, 
    "Cookie": 2, 
    "Chips": 3 
} 

rating= { 
    "Tea": 4, 
    "Coffee": 4.5, 
    "Cookie":5, 
    "Chips": 2 
} 

def getInfo(item): 
    if item in menu: 
     print item + "- price: %s." % price[item] + " Ratings %s" %rating[item] 
    else: 
     print "This item was not found: " + item 

def findCheapest (item1,item2): 
    if item1 in menue and item2 in menue: 
     if (price[item1] < price[item2]): 
      print item2+ " is the cheapest" 
     elif (price[item1] > price[item2]): 
      print item1 +" is the cheapest" 
    else: 
     print "An item was not found." 

getInfo("tEa") 
getInfo("coFfeE") 
findCheapest("tEa", "coFfeE") 
+0

Разобрался случае чувствительной части идеи для произвольного числа входов ??? – user3064626

ответ

0

Независимо от пользовательского ввода, используйте функцию капитализировать. и получить цену и рейтинг. Капитализуйте прибыль с помощью только первой буквы каждого слова в капитале, все остальные ниже

list_of_items = [x.capitalize() for x in raw_input.split()] 
find_cheapest(list_of_items) 

def find_cheapest(list_of_items): 
    cheapest_price = 12345 
    cheapest_item = "" 
    for item in list_of_items: 
     # Get the price of the item and check with the least price 
     item_price = price.get(item,None) 
     if item_price and item_price < cheapest_price: 
      cheapest_price = item_price 
      cheapest_item = item 
    if cheapest_item: 
     return cheapest_item + "is the cheapest" 
    else: 
     return "No Items were found" 
+0

, но если в нижнем регистре в меню [], где находится поиск, вы также печатаете их в нижнем регистре. нет? – user3064626

+0

@ user3064626 Затем вы можете использовать функцию capitalize. Отредактированный мой ответ –

+0

, но это будет использовать все, я не хочу, чтобы он печатался в нижнем регистре прописных букв, если tEa должен печатать как Tea, Coffe и т. Д., Как в пунктах меню. или это может быть я не получаю ваши ответы вообще? – user3064626

-1

Код выглядит довольно хорошо. Одним из простых исправлений является использование функций upper и lower для правильного форматирования элементов перед выполнением логики.

def format_item(someItem): 
    return " ".join(x[0].upper() + x[1:].lower() for x in someItem.split()) 

print format_item("tEA") #Tea 

Тогда вы можете просто вызвать элемент форматирования до остальной части своей логики. Например.

def findCheapest (item1,item2): 
    item1 = format_item(item1) 
    item2 = format_item(item2) 
    ... 
+0

, как бы вы учитывали другие пункты меню, такие как Chicken Sandwich или Club Turkey Sandwich – user3064626

+0

Я не понимал, что варианты меню с несколькими слоями (без пробелов) были проблемой. Я исправлю это –

0

Используйте либо @Aswin Murugesh решение сделать все строчными и прописными
Или
WRT ваши текущие настройки, вы можете использовать capitalize()
Или
конструкт следующие строки (первый символ верхнего используя upper() + полукокса отдых ниже, используя lower()), чтобы сделать 1-й уставный капитал.

getInfo("tEa".capitalize()) 
getInfo("coFfeE".capitalize()) 
findCheapest("tEa".capitalize(), "coFfeE".capitalize()) 

Применить его входные значения или как первый шаг в методе

0
 
    my_menu= ["Tea", "Coffee", "Cookie", "Chips"] 

    price={ 

     "Tea": 7, 
     "Coffee": 5, 
     "Cookie": 2, 
     "Chips": 3 
    } 

    rating= { 
     "Tea": 4, 
     "Coffee": 4.5, 
     "Cookie":5, 
     "Chips": 2 
    } 

    def isItemInMenue(item="", menu=[]): 
     for x in menu: 
      if x.lower() == item.lower(): 
       return x 
     return "" 

    def getInfo(item): 
     item_ = isItemInMenue(item, my_menu) 
     if item_: 
      print item_ + " - price: %s." % price[item_], "Ratings %s" % rating[item_] 
     else: 
      print "This item was not found: " + item_ 

    def findCheapest (item1, item2): 
     item1_ = isItemInMenue(item1, my_menu) 
     item2_ = isItemInMenue(item2, my_menu) 
     if item1_ and item2_: 
      if (price[item1_] price[item2_]): 
       print item1_ + " is the cheapest" 
     else: 
      print "An item was not found." 

    getInfo("tEa") 
    getInfo("coFfeE") 
    findCheapest("tEa", "coFfeE") 
Смежные вопросы