2015-05-20 84 views
3

我正在尝试学习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

为什么这个downvoted? – tenwest

回答

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() 

全局速度较慢,使你的代码更难以维护和不好的原因有整体筏。

+0

谢谢保罗和其他人下面。快速和全面,我真的很感激它。 – c3066521

+0

完成并再次感谢。只是一个快速的后续行动。以get_inputs函数的第一个例子,我能够返回两个单独的值吗?例如:return input1,input2 – c3066521

1

简单的答案是通过sales_amountgets_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() 
0

在每个get_inputs中,c alculate_discounts和main,sales_amount是一个局部变量。如果每个子例程使用不同的变量名称(目前所有三个子程序都使用sales_amount),那么对您来说可能更有意义。

我建议get_inputs返回一个结果,并且主要将get_inputs的结果存储到一个变量中,然后将该变量传递给calculate_discounts。

0

这是因为函数中定义的变量在Python中是本地的。

请参阅this StackOverflow answer以帮助您了解从何处访问变量。

在你的情况,你应该通过sales_amount作为参数传递给你的函数,正如其他人指出:)

相关问题