首先,我要说我已经做了彻底的研究,试图理解。但我不明白别人给出的解释(提问者的理解是这样)。这是我遇到的代码:
def tax(bill):
"""Adds 8% tax to a restaurant bill."""
bill *= 1.08
print "With tax: %f" % bill
return bill
def tip(bill):
"""Adds 15% tip to a restaurant bill."""
bill *= 1.15
print "With tip: %f" % bill
return bill
meal_cost = 100
meal_with_tax = tax(meal_cost)
meal_with_tip = tip(meal_with_tax)
当我删除第一个"返回账单"并运行它,我得到第一个数字,但它尝试计算第二个数字时出错。除税(账单)需要100,输出108对吗?因此,如果我删除第一个"返回账单",那么为什么def tip(bill)没有用108进行计算而不是给出错误?
我在掌握最基本的编程概念时遇到了问题。我现在已经学习了3个月,这就是我的所在。这是一个非常滑的主题,让我的头脑掌握,我真的很感激一些帮助。
答案 0 :(得分:1)
我相信你误解了return
和print
声明之间的区别。
在tax(bill)
函数中,您将乘以bill *= 1.08
。然后,print
bill
的值。 print
仅将bill的值输出到控制台窗口 - 它不存储该值或允许其以任何方式被其他函数使用。
您要删除的return
语句会将存储在bill 108
中的值返回给调用者。此实例中的调用者是meal_with_tax = tax(meal_cost)
。这意味着meal_with_tax
的值是tax(bill)
的返回值。删除return bill
后,您返回的值为None
,因此meal_with_tax
的值为None
。您想要return bill
,以便将值108
分配给meal_with_tax
。
tip(bill)
返回错误的原因是因为它正在尝试计算None *= 1.15
。您认为bill
内tip(bill)
的价值不是108
。