Python 函数内部的输入

Python 函数内部的输入,python,function,input,Python,Function,Input,我做了一个ATM功能程序,我需要帮助,因为我不能在我的程序中显示我的用户名和密码。错误是 NameError: name 'un' is not defined 我尝试在第一行中定义un,但在用户输入信息后,该值不会改变 #functions def FWelcome(): print("WELCOME!") print("Please Log-In to access ATM:") return; def FUsername(): while True:

我做了一个ATM功能程序,我需要帮助,因为我不能在我的程序中显示我的用户名和密码。错误是

NameError: name 'un' is not defined
我尝试在第一行中定义un,但在用户输入信息后,该值不会改变

#functions
def FWelcome():
    print("WELCOME!")
    print("Please Log-In to access ATM:")
    return;

def FUsername():
    while True:
        un=input("\nEnter Username ( use only letters ):")
        if un.isalpha():
            break
        else : #invalid
            print ("Invalid Username. Use of symbols and/or numbers are not allowed.\n")
    return;

def FPassword():
    while True:
        pw=input("Enter Password ( use only numbers ):")
        if pw.isnumeric():
            break
        else : #invalid
            print ("Invalid Password. Use of symbols and/or letters are not allowed.\n")
    return;

#atm program
FWelcome()

#username
FUsername()

#password
FPassword()

print("\nHello! Your Username is ", un, " and your password is ",pw )

您应该返回以下值:

def FUsername():
    while True:
        un=input("\nEnter Username ( use only letters ):")
        if un.isalpha():
            break
        else : #invalid
            print ("Invalid Username. Use of symbols and/or numbers are not allowed.\n")
    return un

def FPassword():
    while True:
        pw=input("Enter Password ( use only numbers ):")
        if pw.isnumeric():
            break
        else : #invalid
            print ("Invalid Password. Use of symbols and/or letters are not allowed.\n")
    return pw

#atm program
FWelcome()

#username
un = FUsername()

#password
pw = FPassword()

在函数内部声明un,但尝试在该函数外部访问它。解决这个问题的一种方法是返回值。另一种方法是使变量全局化

#Comment the 2 below lines out if you want to return the variables from the function.
un=input("\nEnter Username (use only letters ):")
pw=input("Enter Password ( use only numbers ):")
def FWelcome():
    print("WELCOME!")
    print("Please Log-In to access ATM:")
    return;

def FUsername():
    while True:
        #Comment this out if you want to declare it globally
        un=input("\nEnter Username ( use only letters ):")
        if un.isalpha():
            break
        else : #invalid
            print ("Invalid Username. Use of symbols and/or numbers are not allowed.\n")
    return un

def FPassword():
    while True:
        #Comment this out if you want to declare it globally.
        pw=input("Enter Password ( use only numbers ):")
        if pw.isnumeric():
            break
        else : #invalid
            print ("Invalid Password. Use of symbols and/or letters are not allowed.\n")
 #Or return the variable un
    return pw

#atm program
FWelcome()

#username
FUsername()

#password
FPassword()



print("\nHello! Your Username is ", un, " and your password is ",pw )

un是在FUsername中定义的,因此在全局范围内无法访问。您必须将print un语句放在函数内部,或者使用默认的伪值全局声明它,然后在FUsername中更新它

您需要返回un和pw的值,以便在函数外部使用它们。仅供参考,您不需要在return语句末尾使用分号OK,un和pw现在存在于全局范围内,因此名称错误将不再发生;那很好。但现在程序要求用户名和密码各输入两次,它会忽略您为每个输入的第二个值,而不是坚持第一个值,不管它们是否实际有效输入;这很糟糕。当它第二次要求用户输入时,你需要注释掉它。对不起,我想我在评论中提到了这一点,但我忘了。我将编辑这篇文章来反映这一点。@DavidG谢谢,我想这只是习惯谢谢你们,我现在学会了如何正确使用函数。有一个美好的一天返回值是必要的,但还不够;调用函数时,还需要将值分配给变量。当然,您已经知道这一点,因为您建议的代码正是这样做的。我只是觉得有必要用散文重申一下:非常感谢你,很抱歉找不到我要找的那篇文章