Python 函数内部的输入
我做了一个ATM功能程序,我需要帮助,因为我不能在我的程序中显示我的用户名和密码。错误是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:
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谢谢,我想这只是习惯谢谢你们,我现在学会了如何正确使用函数。有一个美好的一天返回值是必要的,但还不够;调用函数时,还需要将值分配给变量。当然,您已经知道这一点,因为您建议的代码正是这样做的。我只是觉得有必要用散文重申一下:非常感谢你,很抱歉找不到我要找的那篇文章