我有这个包含以下内容的文本文件:
Ryan#Male#Ryan123#Ryan321#
Lina#Female#Lina123#Lina321#
订单为Name#Gender#username#password
。
user = username.get() //from tkinter entry
pass = password.get()
counter = IntVar()
counter = 0
file = open("user.txt", "r")
for login in file:
login = login .split('#')
if user == login [2]:
counter += 1
if pass== login [3]:
counter += 1
file.close()
if counter == 2:
//go to next page
else:
print "wrong username or password!"
这有效,但是,当我尝试打印登录[2]时,它返回了;
Ryan123
Lina123
当我使用Ryan
作为用户名时,我仍然可以使用Lina
的密码登录。如何检查每行.txt文件行中的内容?
我的意思是,首先检查这一行:
Ryan#Male#Ryan123#Ryan321#
当找不到登录信息时,它将进入下一行。
答案 0 :(得分:2)
密码问题是因为您从未在行之间重置计数器。但是,在不计算条件的情况下,它可以更简单地完成:
file = open("user.txt", "r")
for login in file:
login = login.split('#')
if user == login[2] and password == login[3]:
print 'Correct username/password'
break
else:
print 'Invalid username/password'
顺便说一句, pass
是Python中的关键字,因此为变量名使用其他内容是个好主意。
答案 1 :(得分:1)
这里需要一个“和”条件,因为密码和用户名应该匹配!
he_is_cool = False
for login in file:
login = login .split('#')
if user == login [2] and pass== login [3]:
he_is_cool = True
break
file.close()
if he_is_cool:
//go to next page
else:
print "wrong username or password!"
请注意,当您识别出用户时,break
将“终止”您的循环。该计划也将在没有break
的情况下运作。
答案 2 :(得分:1)
您正在检查可能位于两条不同线路上的两个不同的字段(例如,用户匹配Ryan,密码与Lina' s匹配)。
通常,用户和密码必须与单个特定用户匹配。
所以你可以摆脱计数器并尝试使用
pwd = password.get()
with open("user.txt", "r") as file:
for login in file:
login = login .split('#')
if user == login[2] and pwd == login[3]:
pass # go to next page, substitute pass on this line!
else:
print "wrong username and password!"