问题描述
我试图创建一个登录系统,该系统可以检查用户名和密码是否包含在用户列表中(我用它来存储不同的用户密码及其名称)。
userlist = []
def userpage():
print("user page accessed")
opt = int(input("Enter '0' to log out"))
if opt == 0:
mainpage()
def signin():
username = input("Please enter username: ")
for user in userlist:
if username in user:
password = input("Please enter password: ")
if password in user:
userpage()
else:
print("Incorrect password")
mainpage()
else:
print("Unregister username")
mainpage()
def signup():
username = input("Please enter username: ")
password = input("Please enter password: ")
userlist.append([username,password])
print(userlist)
userpage()
def mainpage():
opt = int(input("Enter '0' to sign up,'1' to sign in: "))
if opt == 0:
signup()
elif opt == 1:
signin()
mainpage()
请注意,我使用 print(userlist) 检查用户名和密码是否存储在列表中。注册功能有效(正如我从打印(用户列表)中看到的那样,但登录功能存在问题(我想用它来检查有效的用户名和密码)。因为用户在注册后将立即访问用户页面,登录功能在第一个用户注册并退出后重新登录时起作用。用户列表有他们的用户名。
解决方法
您的问题是,如果第一个凭据数组不匹配,您会立即引发错误。它检查第一个用户密码对,然后如果它不匹配,则会引发错误。所以你的代码应该是:
def signin():
username = input("Please enter username: ")
for c,user in enumerate(userlist):
if username in user:
password = input("Please enter password: ")
if password in user:
userpage()
else:
print("Incorrect password")
mainpage()
else:
if c != len(userlist):
pass
else:
print("Unregistered username")
mainpage()