简单的登录脚本文件中的多个用户
问题描述:
我的Python 3.5.2中的登录脚本有问题。简单的登录脚本文件中的多个用户
与我的代码的问题是,只有文件users.txt第一个用户可以通过登录。第二和第三个用户收到“错误的用户名/密码”消息。我在这里错过了什么?
数据在users.txt被格式化这样的:
名称|姓|角色| ID |用户名|密码
约翰|约翰逊|导演| 1个|联系我们|后台管理
Mike | Madson |首席财务官| 2 |迈克|迈克
问题只有约翰通行证登录,我也需要迈克。
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()
感谢您的帮助!
答
逻辑错了。你需要类似的东西:
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()
答
这是因为该行
if uname == username and pword == password:
的因为你要求他们在函数的开头的用户名和密码的用户,我认为他们请输入“admin”和“admin”,这个检查是唯一要通过这个组合。您应该在for循环中包含input
请求,或者将其重构为更好。
+0
嗯,是的,我的逻辑很糟糕... – FrankieD
答
当你阅读的文本文件,约翰将是第一个,所以你的使用,如果statment进行比较,如果用户名和密码匹配,你仅与第一comapring时文本文件的一行。所以当你进入麦克风时,它会与文本文件上的约翰相符合,从我所了解的情况来看,这就是你出错的地方
我试过了,但是我得到了NameError :name'xrange'未定义 – FrankieD
xrange在python 3中被重命名为范围,并且它们消除了xrange函数。它只是返回一个发电机,而不是Python中的列表3 – wpercy
@wpercy耶现在它的工作,谢谢你们:) – FrankieD