Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在函数之间使用用户输入时遇到问题_Python_Function_Scope - Fatal编程技术网

Python 在函数之间使用用户输入时遇到问题

Python 在函数之间使用用户输入时遇到问题,python,function,scope,Python,Function,Scope,我正在努力学习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

我正在努力学习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
文件“/Users/Desktop/assA3.py”,第17行,在
main()
文件“/Users/Desktop/assA3.py”,第14行,主目录
计算折扣(销售金额)
名称错误:未定义名称“销售金额”
我认为变量
sales\u amount
在以后引用之前是由用户输入定义的。我不知道我错过了什么


我很抱歉这个问题是多么的基本,但我显然误解了一些基本的东西,我真的很挣扎。任何帮助都将不胜感激。谢谢。

您正在尝试在其他函数中使用函数范围变量。函数
get\u inputs
之外的任何内容都看不到变量
sales\u amount
,它是该函数的局部变量。您将在
折扣金额
中遇到相同的问题,其范围为
计算折扣

而是返回值并将其传递给其他函数

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

全局比较慢,使您的代码更难维护,并且由于各种原因都不好。

简单的答案是将
销售金额
获取输入()中传递出去:

并在
main()中使用它:

如果要使其“自包含”,则需要使用类:

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

在每个get_输入中,计算_折扣和主要销售金额是一个局部变量。如果每个子例程都使用不同的变量名,而目前这三个变量都使用sales\u amount,那么对您来说可能更有意义


我建议get_输入返回一个结果,main将get_输入的结果存储到一个变量中,然后将该变量传递给计算折扣。

这是因为函数中定义的变量在Python中是局部的

请参阅以帮助您了解从何处可以访问变量


在您的情况下,您应该将sales_amount作为一个参数传递给您的函数,正如其他人所指出的:)

为什么会被否决?谢谢Paul和下面的其他人。迅速全面,我真的很感激。完成了,再次感谢。只是快速跟进。以get_inputs函数的第一个示例为例,我是否能够返回两个单独的值?例如:返回输入1,输入2
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()