2016-03-03 57 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")