我正在使用CodeAcademy中的初学者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
}
food = shopping_list
def compute_bill(food):
total = 0
for item in food:
if stock[item]>0:
total += prices[item]
stock[item] -=1
return total
print total
compute_bill(food)
谢谢 - 所以我现在明白在return total
之后一切都被忽略了 - 一个更好的问题可能是为什么会这样?
是否存在以这种方式在print total
之后包含return total
并且不希望两者都发生的情况?
答案 0 :(得分:1)
我喜欢你的方法,因为它结构合理,程序流程清晰。但是,您没有用于调用函数的正确语法。使用您当前的布局,您需要这样做:
shopping_list = ["banana", "orange", "apple"]
stock = {
"banana": 6,
"apple": 0,
"orange": 32,
"pear": 15
}
prices = {
"banana": 4,
"apple": 2,
"orange": 1.5,
"pear": 3
}
#food = shopping_list # Not needed as it is used as input parameter
def compute_bill(food):
global stock # Not strictly needed, see below.
total = 0
for item in food:
if stock[item]>0:
total += prices[item]
stock[item] -=1
return total
print compute_bill(shopping_list) # Calling function and printing result
将来可能会咬你的另一件事是,通常不可能更新函数中的全局变量stock
,因为对于大多数变量,它只是一个可用于函数的副本,该副本不可写,如果它不在输入参数列表中 - 除非使用关键字global
。但是,对于词典(以及列表和其他集合),不需要global
关键字。