繁体   English   中英

无法在功能之间使用用户输入

[英]Having trouble using user input between functions

我正在努力学习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是由用户输入定义的,稍后会引用它。 我无法弄清楚我错过了什么。

我为这个问题的基本情况道歉,但我显然误解了一些基本的东西,而我真的很挣扎。 任何帮助将不胜感激。 谢谢。

您正尝试在其他函数中使用函数范围变量。 函数get_inputs之外的任何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速度较慢,使您的代码更难以维护,并且由于各种原因而不好。

简单的答案是从gets_input()传递sales_amount

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

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

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

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

请参阅此StackOverflow答案,以帮助您了解可以访问变量的位置。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM