Python 字典中的递减值

Python 字典中的递减值,python,dictionary,Python,Dictionary,我正在学习python,我的程序有一个简单的问题。我有两个字典,其中一个键作为字符串,值与它们相连。假设这是一家有水果和价格的商店 shopping_list = ["banana", "orange", "apple"] stock = { "banana": 6, "apple": 0, "orange": 32, "pear": 15 } prices = { "banana": 4, "apple": 2, "orange":

我正在学习python,我的程序有一个简单的问题。我有两个字典,其中一个键作为字符串,值与它们相连。假设这是一家有水果和价格的商店

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

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

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

# Function to calculate the bill
def compute_bill(food):
    total = 0

    for number in food:
        if (stock[number]>0):
            total += prices[number]
            stock[number] -= 1
    return total

print compute_bill(shopping_list)
如果水果有库存,在账单上加上价格,减少库存量。如果没有,什么都不要做

错误消息:

使用包含1个苹果、1个梨和1个香蕉的列表调用compute_bill,结果是0,而不是正确的7


我不知道为什么此代码不能正常工作。

问题是,由于
if
语句中的
return
调用,函数过早终止

按照代码的方式,函数将检查篮子中的单个项目,然后退出。您拥有并且想要做的是检查所有项目,将它们的价格添加到您的总价格中,并根据您拥有的供应减少它们的库存量。为此,必须对函数进行如下修改:

def compute_bill(food):
    total = 0

    for item in food:
        if stock[item]>0:
            total += prices[item]
            stock[item] -= 1
    return total
如您所见,
else
零件也已取出。由于如果请求的商品缺货或根本不存在,则不会采取任何行动,因此您没有理由尝试处理任何事情


最后要注意的是,在这种情况下,
if
语句中的括号是不需要的。这是一个非常简单的检查,您正在执行,并且试图调整操作顺序是多余的,因为其意义微不足道。

问题在于,由于
if
语句中的
return
调用,您的函数提前终止

按照代码的方式,函数将检查篮子中的单个项目,然后退出。您拥有并且想要做的是检查所有项目,将它们的价格添加到您的总价格中,并根据您拥有的供应减少它们的库存量。为此,必须对函数进行如下修改:

def compute_bill(food):
    total = 0

    for item in food:
        if stock[item]>0:
            total += prices[item]
            stock[item] -= 1
    return total
如您所见,
else
零件也已取出。由于如果请求的商品缺货或根本不存在,则不会采取任何行动,因此您没有理由尝试处理任何事情


最后要注意的是,在这种情况下,
if
语句中的括号是不需要的。这是一个非常简单的检查,您正在执行,并且试图调整操作顺序是多余的,因为其意义微不足道。

返回函数结束,并将值返回到函数外。如果在循环内部返回,则循环的其余部分将不再运行,您将只考虑第一项。

返回
结束函数并将值返回到函数外部。如果返回到循环内部,循环的其余部分将不再运行,您将只考虑第一项。

这里有两个错误:

  • 测试第一个项目后,您会立即返回,忽略其余项目
    return
    在Python执行函数时退出函数
  • 你在循环之外的错误位置减少了你的库存
两者都需要纠正:

def compute_bill(food):
    total = 0

    for item in food:
        if stock[item] > 0:
            # this item is in stock. Add the price to the total,
            # and reduce the stock by one.
            total += prices[item]
            stock[item] -= 1
    # with the loop done, return the total sum of all items
    # that were in stock.
    return total
现在,不是立即返回第一个测试项目的
total
,而是测试所有项目。当你发现一件商品有库存时,你就把这件商品的价格加到总价格中,然后把这件商品的库存减少1


最后一个细节是,代码学院测试人员为您调用compute\u bill()函数。不要在代码中自己调用它,否则测试会失败,因为您已经更改了库存。删除打印计算填充(购物清单)
行。

这里有两个错误:

  • 测试第一个项目后,您会立即返回,忽略其余项目
    return
    在Python执行函数时退出函数
  • 你在循环之外的错误位置减少了你的库存
两者都需要纠正:

def compute_bill(food):
    total = 0

    for item in food:
        if stock[item] > 0:
            # this item is in stock. Add the price to the total,
            # and reduce the stock by one.
            total += prices[item]
            stock[item] -= 1
    # with the loop done, return the total sum of all items
    # that were in stock.
    return total
现在,不是立即返回第一个测试项目的
total
,而是测试所有项目。当你发现一件商品有库存时,你就把这件商品的价格加到总价格中,然后把这件商品的库存减少1


最后一个细节是,代码学院测试人员为您调用compute\u bill()函数。不要在代码中自己调用它,否则测试会失败,因为您已经更改了库存。删除
print compute\u fill(购物清单)
行。

。您希望在函数终止之前运行所有项。那么它是否仍不工作?@Ev.Kounis正在工作。一条不必要的线。:)把回程票弄出去。您希望在函数终止之前运行所有项。那么它是否仍不工作?@Ev.Kounis正在工作。一条不必要的线。:)嗨,现在它告诉我,我在股票减少之前调用这个函数:“股票看起来不太合适!确保不要调用compute_bill,因为它会改变股票!它应该包含:{'orange':32,'pear':15,'banana':6,'apple':0}”@Maltesse:啊,不,你不应该自己调用这个函数。删除
打印计算账单(购物清单)
行,测试仪将为您执行此操作。谢谢,。当我通过传递购物清单调用函数时,最后一行是错误的。谢谢你的帮助!嗨,现在它告诉我,我在股票减少之前调用这个函数:“股票看起来不太合适!确保不要调用compute_bill,因为它会改变股票!它应该包含:{'orange':32,'pear':15,'banana':6,'apple':0}”@Maltesse:啊,不,你不应该自己调用这个函数。删除
打印计算账单(购物清单)
行,测试仪将为您执行此操作。谢谢,。当我通过传递购物清单调用函数时,最后一行是错误的。谢谢你的帮助@马尔蒂安皮特