我试图创建一个登录系统,检查用户名和密码是否在列表中。我在下面的代码中遇到的问题是,当第一个凭据数组不匹配时,它将只在下一次输入时检查第一个用户密码对。我可以知道这个错误的原因是什么吗?我该如何避免它?
userlist = [["k",'l'],['m','z'],['l','o']] #dummy data
def signin():
username = input("Please enter username: ")
for user in userlist:
if username == user[0]:
password = input("Please enter password: ")
if password == user[1]:
print("correct password")
signin()
else:
print("Incorrect password")
signin()
else:
print("Unregister username")
signin()
signin()
输出:
Please enter username: k
Please enter password: l
correct password
Please enter username: m
Unregister username
Please enter username: l
Unregister username
Please enter username:
预期输出:
Please enter username: k
Please enter password: l
correct password
Please enter username: m
Please enter password: z
correct password
Please enter username: l
Please enter password: o
correct password
Please enter username:
将最后一个else放回空格,使其与for循环内联。为什么?现在,如果你在第一次输入时输入l,它会检查这个列表["k",'l']
。它不在那里,所以它会去其他地方。将else放在for循环之外可以确保我们在做出决定之前遍历整个列表。
userlist = [["k",'l'],['m','z'],['l','o']] #dummy data
def signin():
username = input("Please enter username: ")
for user in userlist:
if username == user[0]:
password = input("Please enter password: ")
if password == user[1]:
print("correct password")
signin()
else:
print("Incorrect password")
signin()
else:
print("Unregister username")
signin()
signing()