我的Python 3.5.2中的登录脚本有问题。
我的代码存在问题,只有文件 users.txt 中的第一个用户才能通过登录。第二和第三个用户获得"错误的用户名/密码"信息。我在这里缺少什么?
users.txt中的数据格式如下:
命名|姓|角色| ID |用户名|密码
约翰|约翰逊|导演| 1名|管理员|管理员
麦克|马德森| CFO | 2 |麦克|麦克
问题是只有John通过登录,我也需要Mike。
def check():
username = str(input("Username: "))
password = str(input("Password: "))
f = open("users.txt", "r")
file_content = f.read()
users = file_content.split("\n")
for user in users:
user_array = user.split("|")
uname = user_array[4]
pword = user_array[5]
if uname == username and pword == password:
print("Hello " + user_array[1] + ".")
print("You are logged in as: " + user_array[2] + ".")
main_menu()
else:
print("Wrong username/password.")
print("Try again!\n\n")
check()
check()
感谢您的帮助!
答案 0 :(得分:0)
因为行
if uname == username and pword == password:
因为您在功能开头询问用户的用户名和密码,我认为他们输入了" admin"和" admin",此检查只会通过该组合。您应该在for循环中包含input
个请求,或者重新构建它以更好地工作。
答案 1 :(得分:0)
逻辑错了。你需要这样的东西:
def check():
# You need to read it only once, not every loop
users = open("users.txt").read().split("\n")
for i in range(len(users)): users[i] = users[i].split("|")
# Now what you want is to loop infinitely
# until you get correct username/password
# instead of recursive calling this
# function over and over again
while True:
username = str(input("Username: "))
password = str(input("Password: "))
for user in users:
uname = user[4]
pword = user[5]
if uname == username and pword == password:
print("Hello " + user[1] + ".")
print("You are logged in as: " + user[2] + ".")
main_menu()
# If none of the records matched the input
print("Wrong username/password.")
print("Try again!\n\n")
check()
答案 2 :(得分:0)
当您阅读文本文件时,john将是第一个,因此当您使用if语句来比较用户名和密码是否匹配时,您只与文本文件的第一行共同编写。因此,当你进入迈克时,它会与约翰在文本文件上进行比较,据我所知,这就是你出错的地方