2016-03-03 58 views
-1

所以我给出的菜单和食品等级,我要创建一个数据结构,然后进行的getInfo功能,findCheapest功能。转换成输入任意数量,同时不区分大小写

的getInfo(项目)需要1节,并打印奏其价格和评级。
findCheapest(item1,item2)需要2个项目,检查项目是否在菜单中,并给出最便宜的。我写了这么远的地方就是我挣扎的地方。

如何使所有的输入不区分大小写的两种功能,但仍返回格式正确无误的话。例如:

的getInfo(“TEA”)应该返回: 沏茶价格:7评级:4

我让你可以做字符串比较,并将其转换为小写,但你不能这样做,在一个设置原因然后它会打印错误,你怎么做,并仍然正确地比较每个值。

第二部分我在挣扎是为findCheapest功能如何让这个它可以采取值任意数量仍然打印的最便宜在不改变数据结构太多。

所以我实施了转换为正确的格式formatText(项目)的功能。

下面是代码:

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然后您可以使用大写功能。编辑我的回答 –

+0

但会利用一切,我不希望它以大写字母的小写打印,如果茶叶应茶,咖啡等打印像它的菜单项。或者它可能是我没有得到你的答案? – user3064626

-1

代码看起来不错迄今。一个简单的解决方法是在执行逻辑之前使用upperlower函数来正确格式化您的项目。

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

你将如何解释其他菜单项目,如鸡肉三明治或俱乐部土耳其三明治 – user3064626

+0

我没有意识到多字(空白分隔)菜单选项是一个问题。我会解决它 –

0

二者必选其一@Aswin Murugesh的解决方案,使一切大写或小写
或者
WRT您当前的设置,您可以使用capitalize()
或者
结构下面的字符串(第1字符上使用upper() +其余字符使用lower()降低)来制作第一个字符资本。

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")