2016-02-04 99 views
1

我有一个包含该文本文件:读一行行从文本文件

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# 

,并在未找到登录信息,它会继续到下一行。

+1

可能无关尝试:由一个标签的缩进是错误的for循环,踢'登录=登录.split(“#”)'在 – Pynchia

+1

是的,你是检查两个不同的领域可能躺在两个不同的行(例如,用户匹配瑞安和密码匹配丽娜的)。通常用户和密码都必须匹配一个给定的用户 – Pynchia

+1

要小心,'pass'是一个python关键字。 – keksnicoh

回答

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关键字,所以它的使用别的了变量名是个好主意。

+0

是的,我只是把'pass'换成别的东西。这很容易理解,非常有效。谢谢! – procatmer

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

1

您正在检查可能位于两条不同行的两个不同字段(例如用户匹配Ryan,密码与Lina匹配)。

正常情况下,用户和密码必须匹配一个给定的用户。

这样你就可以摆脱计数器与

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!" 
+0

我相信你想要“休息”,而不是“通过”。编辑:我明白你为什么现在使用'通过'。不过,我建议您跳出循环,并在重定向到新页面之前让文件正确关闭。 (另外,你的注释语法是错误的,Python使用'#'进行单行注释。) – pzp

+0

@pzp nope,对不起。我在评论后使用了pass,我的意思是用代码直接替代'去下一页'。现在编辑得更好。谢谢 – Pynchia