<p>您试图在声明<code>access()</code>之前调用它!这是因为定义<code>access()</code>的代码放在它的声明之后,所以您的代码实际上是在试图找到一个不存在的函数!这是一个<a href="https://stackoverflow.com/questions/291978/short-description-of-the-scoping-rules">scoping issue</a>,非常常见</p>
<p>下面的代码(通过将<code>access()</code>的定义置于<code>main()</code>之外)起作用:</p>
<pre><code>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()
</code></pre>
<p>我也不认为建议在函数中定义函数(对于这种类型的项目),而是可以创建一个包含各种函数的类:</p>
<pre><code>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()
</code></pre>
<p>接下来,您必须实现某种安全性(上面的代码没有任何安全性!所以千万不要把它用在重要的事情上。不要使用用户和密码字典,那只是作秀而已</p>
<p>希望它能重新点燃你对Python的爱</p>