我正在使用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
print total
return total
编辑: 这些也没有给我一个读数:
def compute_bill(food):
total = 0
for item in food:
if stock[item]>0:
total += prices[item]
stock[item] -=1
print "Total is $",total #tried 0-5 indentations, same blank result
然而
def compute_bill(food):
total = 0
for item in food:
if stock[item]>0:
total += prices[item]
stock[item] -=1
print "Total is $",total #tried 0-5 indentations, same blank result
return total
print compute_bill(food)
返回
Total is $ 5.5
5.5
虽然 - 我确实找到了解决方案......
def compute_bill(food):
total = 0
for item in food:
if stock[item]>0:
total += prices[item]
stock[item] -=1
return total
print "Total is $",compute_bill(food)
返回 总计5.5美元 ...但我很困惑为什么我不能只打印应该更新的变量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
def compute_bill(food):
total = 0
for item in food:
if stock[item]>0:
total += prices[item]
stock[item] -=1
print total
return total
你定义一个函数def compute_bill
。你从不称呼这个功能。如果被调用,则执行该函数,例如, compute_bill(["banana"])
答案 1 :(得分:1)
我不确定我是否完全理解这个问题,但是你说
但是我很困惑为什么我不能只打印变量total,它应该已经更新。
如果您尝试从函数外部打印total
,它将无效,因为total
变量仅在函数内声明。当您return total
时,您允许其余代码从您的函数外部获取数据,这就是print computeBill(food)
可行的原因。
编辑,如果你想在每次迭代时打印总数,你的代码:
def compute_bill(food):
total = 0
for item in food:
if stock[item]>0:
total += prices[item]
stock[item] -=1
print "Total is $",total
肯定会有这种缩进,这意味着每次在for
循环中进行迭代时都会打印(如果保持原样,它只会在for
之后打印)。
答案 2 :(得分:1)
print语句是函数compute_bill(..)的一部分,除非你调用函数compute_bill(..),否则它将被执行。
def compute_bill(food):
total = 0
for item in food:
if stock[item]>0:
total += prices[item]
stock[item] -=1
print "Total is $",total #this works
compute_bill(food) # call the function it has the print statement