我正在努力学习Python,而且我真的很难将我的代码变成自包含的函数。这是一个例子:
def get_inputs():
sales_amount = float(input("Enter total sales amount: "))
def calculate_discount(sales_amount):
discount_amount = sales_amount * 2
return discount_amount
def output():
print ( discount_amount )
def main():
get_inputs()
calculate_discount(sales_amount)
output()
main()
运行它会返回
File "/Users/Desktop/assA3.py", line 17, in <module>
main()
File "/Users/Desktop/assA3.py", line 14, in main
calculate_discount(sales_amount)
NameError: name 'sales_amount' is not defined
我认为变量sales_amount
是由用户输入定义的,稍后会被引用。我无法弄清楚我错过了什么。
我为这个问题的基本情况道歉,但我明显误解了一些基本的东西,而我真的很挣扎。任何帮助将不胜感激。感谢。
答案 0 :(得分:4)
您正尝试在其他函数中使用函数范围变量。函数get_inputs
之外的任何内容都不能看到变量sales_amount
,它是该函数的本地变量。您将遇到与discount_amount
相同的问题,其范围为calculate_discount
。
而是返回值并将它们传递给其他函数。
def get_inputs():
return float(input("Enter total sales amount: "))
def calculate_discount(sales_amount):
discount_amount = sales_amount * 2
return discount_amount
def output(discount_amount):
print ( discount_amount )
def main():
inputs = get_inputs()
discounts = calculate_discount(inputs)
output(discounts)
main()
脏选项是使它们成为全局
def get_inputs():
global sales_amount
sales_amount = float(input("Enter total sales amount: "))
def calculate_discount(sales_amount):
global discount_amount
discount_amount = sales_amount * 2
return discount_amount
def output():
print ( discount_amount )
def main():
get_inputs()
calculate_discount(sales_amount)
output()
main()
Globals速度较慢,使您的代码难以维护,并且由于各种原因而不好。
答案 1 :(得分:1)
简单的答案是将sales_amount
传递出gets_input()
:
def get_inputs():
sales_amount = float(input("Enter total sales amount: "))
return sales_amount
并在main()
中使用它:
def main():
sales_amount = get_inputs()
calculate_discount(sales_amount)
output()
如果你想让它“自足”,那么你想要使用类:
class Sales(object):
def get_inputs(self):
self.sales_amount = float(input("Enter total sales amount: "))
def calculate_discount(self):
self.discount_amount = self.sales_amount * 2
def output(self):
print ( self.discount_amount )
def main():
my_sale = Sales()
my_sale.get_inputs()
my_sale.calculate_discount()
my_sale.output()
main()
答案 2 :(得分:0)
在get_inputs,calculate_discounts和main中,sales_amount是一个局部变量。如果每个子例程使用不同的变量名称,目前三者都使用sales_amount,那么你可能会更有意义。
我建议get_inputs返回一个结果,然后主要将get_inputs的结果存储到一个变量中,然后传递给calculate_discounts。
答案 3 :(得分:0)
这是因为函数中定义的变量在Python中是本地的。
请参阅this StackOverflow answer,以帮助您了解可以访问变量的位置。
在您的情况下,您应该将sales_amount作为参数传递给您的函数,正如其他人指出的那样:)