2016-02-04 98 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