"进行购买"在Codecademy的Python教程中

时间:2017-02-17 11:24:24

标签: python

作业说明如下:

定义一个函数compute_bill,它将一个参数food作为输入。 在函数中,创建一个初始值为零的变量total。 对于食物清单中的每个项目,将该项目的价格添加到总计。 最后,返回总数。 忽略您正在结算的商品是否有库存。

请注意,您的功能应适用于任何食物清单。

以下是我尝试解决问题

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 item in food:
        for items in prices:
         if food[item]==prices[items]:
            print prices[item]
            total+=prices[item]
         else:
            print 'not found'
    return total
compute_bill(['apple', 'jok'])

我得到的错误是:

  

追踪(最近一次通话):     文件" python",第26行,in     在compute_bill中的文件" python",第21行   KeyError:' jok'

我随机列出了" jok"就像它对任何清单所说的那样。有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

您遇到的错误是因为您试图从字典中获取不包含该密钥的项jok的价格。

为了避免该错误,最好检查您检查的密钥是否存在,如下所示:

if item in prices:
            total+= prices[item]

因此,代码应该如下所示:

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):
    # Set total variable to 0
    total=0
    # Loop over every item in food list to calculate price
    for item in food:
        # Check that the item in the food list really exists in the prices
        # dicionary
        if item in prices:
            # The item really exists, so we can get it's price and add to total
            total+= prices[item]
    print total
compute_bill(['apple', 'jok', 'test', 'banana'])

答案 1 :(得分:0)

食物是一个列表,而不是字典 - 因此您无法通过列表中的索引以外的任何内容查找列表中的项目。但是没有必要重新查找该项目,因为您已经在迭代它。

你也不能迭代字典,所以也需要改变

for items in prices:
 if food[item]==prices[items]:

应该只是

for key, val in prices.items():
    if item == key:

但这仍然没有意义,相反,你只需要找出该项目是否在字典中

for item in food:
    price = prices.get(item)
    if price: 
        total+=price