定义 If 语句时出错.(蟒蛇)



所以我对编码和Python非常基本。我曾经好多了,但有一段时间没有使用它了,我正试图回到事情的摇摆中。我正在尝试执行一个 If 语句,其中要求输入用户名和密码,如果正确,则转到我认为它被调用的"定义",然后在def access((中执行代码

法典:

def main():
userName = ("u123")
userPass = ("p123")
userNameInput = input("Username: ")
userPassInput = input("Password: ")
if userPassInput == userPass and userNameInput == userName:
print("Access granted")
access()
else:
print("Access denied")
return main()
def access():
print("Welcome, " + userName)
access()
main()

但是,当执行正确的输入时,我会收到此错误:

Username: u123
Password: p123
Access granted
Traceback (most recent call last):
File "C:/Users/Tom/Desktop/test.py", line 23, in <module>
main()
File "C:/Users/Tom/Desktop/test.py", line 11, in main
access()
UnboundLocalError: local variable 'access' referenced before assignment
>>>

任何帮助将不胜感激,谢谢。

您正在尝试在声明之前调用access()!这是因为定义access()的代码放在其声明之后,因此您的代码本质上是在尝试查找一个尚不存在的函数!这是一个范围界定问题,而且相当普遍!

下面的代码(通过将access()的定义放在main()之外(有效:

def main():
userName = ("u123")
userPass = ("p123")
userNameInput = input("Username: ")
userPassInput = input("Password: ")
if userPassInput == userPass and userNameInput == userName:
print("Access granted")
access(userName)
else:
print("Access denied")
return main()
def access(userName):
print("Welcome, " + userName)
main()

我也不认为建议在函数中定义一个函数(对于这种类型的项目(,而是你可以创建一个包含各种函数的类:

class Login:
def __init__(self):
self.users = {}
self.userName = ("u123")
self.userPass = ("p123")
def addUser(self, uname, upass):
self.users[uname] = upass;
def login(self):
userNameInput = input("Username: ")
userPassInput = input("Password: ")
if userNameInput in self.users:
if self.users[userNameInput] == userPassInput:
print("Access granted")
self.access(userNameInput)
else:
print("Access denied")
return self.login()
else:
print("Access denied")
return self.login()
def access(self, username):
print("Welcome, "+username+"!")

def main():
mylogin = Login()
mylogin.addUser("u123","p123")
mylogin.login()
main()

展望未来,你必须实现某种安全性(上面的代码没有!所以一定要不要把它用于重要的事情。不要使用用户和密码的字典,这只是为了展示!

希望它能帮助重新点燃你对Python的热爱!

你弄错了作用域,还需要在函数访问中添加一个参数:

def main():
userName = ("u123")
userPass = ("p123")
userNameInput = input("Username: ")
userPassInput = input("Password: ")
if userPassInput == userPass and userNameInput == userName:
print("Access granted")
#now you are able to use the function "access"
access(userName)
else:
print("Access denied")
return main()
#here, define the function in the same identation of the main function, not inside it
def access(userName):
print("Welcome, " + userName)

main()

问题是你在调用函数后定义它,这将可以:

def main():
userName = ("u123")
userPass = ("p123")
userNameInput = input("Username: ")
userPassInput = input("Password: ")
def access():
print("Welcome, " + userName)
if userPassInput == userPass and userNameInput == userName:
print("Access granted")
access()
else:
print("Access denied")
return main()

access()
main()

(假设你不只是混淆了空格,实际上不想在另一个函数中定义一个函数(

最新更新