我正在学习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
我不知道为什么这段代码无法正常工作。
答案 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
结束函数并将值返回到函数之外。如果你在循环内部返回,循环的其余部分将不再运行,你只会考虑第一项。