2012-10-17 44 views
0

以下是計算超市賬單的代碼。一切正常,但問題是,我被告知,如果輸入只是蘋果,這個解決方案將不起作用。爲超市計算賬單

我確實認爲蘋果的價值應該是0,因爲蘋果不在股票中,但我仍然相信有些東西我沒有做到正確。請幫忙。

groceries = ["apple","banana", "orange",] 

stock = {"banana": 6, 
    "apple": 0, 
    "orange": 32, 
    "pear": 15 
    } 

prices = {"banana": 4, 
    "apple": 2, 
    "orange": 1.5, 
    "pear": 3 
    } 

def computeBill(food): 
    total = 0 
    for item in food: 
     tot = prices[item] * stock[item] 
     print item, tot 
     total += tot 
    return total 

computeBill(groceries) 
+4

如果物品沒有庫存,您希望邏輯如何處理?這不是真的這個代碼的問題..只是...你想要它做什麼? – jdi

+1

如果輸入是「[」apple「]',那麼這個人會說什麼呢? –

+1

另外,您在'computeBill'中設置的代碼的方式,它會爲它們記錄整個項目的全部庫存。那是你要的嗎?如果我多次放入「香蕉」,我可以獲得兩倍的可用庫存。 – jdi

回答

1

我只想走下車對我自己這樣的回答並提出建議,因爲它似乎你computeBill功能規格沒有明確定義。

如果這些項目沒有庫存,並且您的教師說在這種情況下返回0是不可接受的,那麼您的其他選項是引發異常或指示錯誤狀態的標記值。

def computeBill(food): 
    total = 0 
    for item in food: 
     stock_count = stock[item] 
     if stock_count == 0: 
      raise ValueError("item %s is out of stock" % item) 
     tot = prices[item] * stock_count 
     print item, tot 
     total += tot 
    return total 

或者,如果你不想拋出異常,你可以返回-1如果你覺得是不是反正有效總:

 if stock_count == 0: 
      return -1 

還有一些其他的問題,在功能它是如何計算清單與股票的,但你說你現在不關心那些人。

+0

我在猜測stock_count是需要的。因爲一切都是一樣的。謝謝。 – ronak

+0

'stock_count'只是提前在變量中保存'stock [item]',這樣我就不必爲'if'和'*'鍵入兩次了。它沒有太大的改變。這實際上通過引發異常或返回-1來改變函數的行爲 – jdi

1

我不知道爲什麼這不起作用。如果輸入是['apple'],會發生這種情況:

computeBill(['apple']) 
total = 0 
item = 'apple' 
tot = price['apple'] * stock['apple'] 
tot = 2 * 0 
print 'apple',0 
total += 0 
return total 
return 0 

除非他們希望能夠在一個單一的項目通過而不會在列表中包裝它,所以調用`computeBill(「蘋果」)。在這種情況下,你必須在函數的開始處進行類型檢查。這可能看起來像這樣

if type(food) is not list: 
    food = [food] 
0
def compute_bill(food): 
    total=0 
    for item in food: 
    if stock[item]>0: 
     tot=prices[item] 
     total+=tot 
     stock[item]-=1 
    return total