减少字典中的值

时间:2016-06-29 09:55:20

标签: python dictionary

我正在学习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

我不知道为什么这段代码无法正常工作。

3 个答案:

答案 0 :(得分:1)

问题是由于return声明中的if调用,您的函数会提前终止。

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

def compute_bill(food):
    total = 0

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

如您所见,else部分也已被删除。如果请求的商品缺货或甚至不存在,则不会采取任何措施,因此您没有理由尝试处理任何事情。

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

答案 1 :(得分:1)

这里有两件事是错的:

  • 在测试第一项后,您会立即返回 ,忽略其余项目。 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.

最后一个细节,Code Academy测试人员为您调用compute_bill()函数 。不要在代码中自己调用它,否则测试会因为您更改库存而失败。删除print compute_fill(shopping_list)行。

答案 2 :(得分:0)

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