2015-05-28 12 views
-2
shopping_list = ["banana", "orange", "apple"] 

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

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

在下面寫下你的代碼!

def compute_bill(food): 
    total = 0 
    for key in food: 
     total = total + food[key] 
    return total 
print compute_bill(prices) 

我在Codeacademy.com上,他們沒有真正解釋如何發送字典到函數。只是列表。當我運行這段代碼,它會打印出我想要什麼,但後來我得到這個錯誤,無法繼續:如何發送字典到python中的函數?

Oops, try again. compute_bill(['apple']) resulted in a TypeError: list 
indices must be integers, not str 
+2

有什麼問題? – Veltro

+2

我在運行代碼時沒有收到任何錯誤。你在任何地方都沒有'compute_bill(['apple'])',所以沒有任何意義,那就是錯誤信息。你確定這是你正在運行的代碼嗎? – Kevin

+0

你的代碼對我很好(Python 2.7),打印'10.5'。 –

回答

2

用戶更好的變量名,所以你不要混淆自己。你有價格表,你想每個項目查找在你的「購物清單」使用該表:

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

# Write your code below! 
def compute_bill(things_I_want_to_buy): 
    total = 0 
    for item in things_I_want_to_buy: 
     total = total + price_table[item] 
    return total 
print compute_bill(['apple', 'pear']) 
+0

那麼究竟是如何解決問題中給出的(已經無錯誤的)代碼? –

+0

返回意外結果的代碼與引發錯誤的代碼一樣錯誤:)。如果你仔細閱讀這個問題,你會看到OP想要得到的結果。 –

+0

該代碼返回「價格」字典中的值的總和。這是什麼意外? –

0

那麼,編碼鍛鍊一邊,回答的實際問題是,你傳遞一個字典函數的功能與您自己定義類型的列表,整數,字符串,集合,元組或對象相同。

例如,說我有一個名爲quack_show功能,我寫的期望得到鴨子的清單,並讓他們都嘎嘎:

def quack_show(duck_list): 
    for duck in duck_list: 
     duck.quack() 

有人可能鴨子的列表傳遞給函數,但沒有限制,說任何人都必須。

首先,duck_list不一定必須是鴨子的列表,只是任何具有我可以調用的方法的任意對象。

其次,duck_list不一定是一個列表,只是我可以用for duck in duck_list迭代的東西。你可以遍歷列表,集合,元組,甚至可以定義你自己的對象,你可以這樣做。你可以迭代字符串,你會得到個別字符。

該函數的所有重要事項是,您實際上可以進行迭代,並且容器中的所有對象都有一個quack()方法。人們甚至可以發送這個函數的字典,只要字典鍵是可以quack()的對象。