来自文件的多个用户的简单登录脚本
Simple login script multiple users from file
我在 Python 3.5.2.
中的登录脚本有问题
我的代码的问题是只有文件 users.txt 中的第一个用户可以通过登录。第二个和第三个用户收到 "Wrong username/password" 消息。我在这里错过了什么?
users.txt 中的数据格式如下:
姓名|姓氏|角色|ID|用户名|密码
John|Johnson|Director|1|admin|admin
迈克|麦德森|首席财务官|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()
感谢帮助!
这是因为
行
if uname == username and pword == password:
因为您在函数的开头要求用户输入用户名和密码,我假设他们输入 "admin" 和 "admin",所以此检查只会通过该组合。您应该在 for 循环中包含 input
请求,或者重组它以使其更好地工作。
逻辑完全错误。你需要这样的东西:
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()
当您读取文本文件时,john 将排在第一位,因此当您使用 if 语句比较用户名和密码是否匹配时,您仅与文本文件的第一行进行比较。所以当你输入 mike 时,它会在文本文件上与 john 进行比较,据我了解,这就是你出错的地方
我在 Python 3.5.2.
中的登录脚本有问题我的代码的问题是只有文件 users.txt 中的第一个用户可以通过登录。第二个和第三个用户收到 "Wrong username/password" 消息。我在这里错过了什么?
users.txt 中的数据格式如下:
姓名|姓氏|角色|ID|用户名|密码
John|Johnson|Director|1|admin|admin
迈克|麦德森|首席财务官|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()
感谢帮助!
这是因为
行if uname == username and pword == password:
因为您在函数的开头要求用户输入用户名和密码,我假设他们输入 "admin" 和 "admin",所以此检查只会通过该组合。您应该在 for 循环中包含 input
请求,或者重组它以使其更好地工作。
逻辑完全错误。你需要这样的东西:
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()
当您读取文本文件时,john 将排在第一位,因此当您使用 if 语句比较用户名和密码是否匹配时,您仅与文本文件的第一行进行比较。所以当你输入 mike 时,它会在文本文件上与 john 进行比较,据我了解,这就是你出错的地方