題目:編程
基於文件實現用戶登陸程序,提示用戶輸入用戶名和密碼,檢查用戶名是否存在,以及用戶名密碼是否正確app
保存密碼的文件叫user.txt,內容:優化
| 做分隔符spa
階段一:指針
本身第一次的答案:code
1 list_1 = [] 2 with open("user.txt",mode="r+",encoding="utf-8") as count: 3 user = input("用戶名:") 4 passwd = input("密碼:") 5 for i in count: 6 val_1 = i.strip().split("|") 7 list_1.append(val_1[0]) 8 if user in list_1: 9 for line in count: 10 val = line.strip().split("|") 11 if user == val[0] : 12 if passwd == val[1]: 13 print("登錄成功") 14 else: 15 print("密碼錯誤") 16 else: 17 print("無此用戶名")
輸出結果:blog
(1)能夠順利運行檢查用戶名不存在的程序ip
(2)可是當輸入正確的用戶名和答案的時候,出現了問題utf-8
內心os: 明明我輸入的用戶名和密碼是正確的爲何沒有print正確的結果,而是沒有任何值呢,我****,到底哪裏出現了問題input
我檢查了半天,仍是沒有檢查出來,就開始心煩氣躁,開始懷疑本身是否是不適合編程。
等到冷靜下來的時候,原來才發現是指針出現了問題,第5行的for循環完成之後,指針已是在最後的位置了,因此當第9行繼續遍歷時,就沒有內容了。
oh,我天,我想殺死本身,這明明就是本身不細心致使的呀,最後只能說本身是第一次寫文件的操做,能夠理解來掩蓋過去。
階段二:
以後我進行了改正,並對11-15行進行了自認爲的優化,下面是優化後的代碼:
1 list_1 = [] 2 with open("user.txt",mode="r+",encoding="utf-8") as count: 3 user = input("用戶名:") 4 passwd = input("密碼:") 5 for i in count: 6 val_1 = i.strip().split("|") 7 list_1.append(val_1[0]) 8 if user in list_1: 9 count.seek(0) 10 for line in count: 11 val = line.strip().split("|") 12 if user == val[0] and passwd == val[1]:print("登錄成功") 13 else: 14 print("密碼錯誤") 15 break
16 else: 17 print("無此用戶名")
我在第9行將指針調整了,而後對12--15行的判斷用戶名密碼是否正確作了優化,下面看看輸出結果
輸出結果:
(1)能夠順利運行檢查用戶名不存在的程序
(2)但當我輸入正確的用戶名密碼時,打臉時刻來了
內心os:我明明輸入正確的用戶密碼爲啥又出錯了,哎呀我煩死了,啥嘛,爲了一個簡單的題浪費我一個多小時,哎,氣死我了
等待我心情平復以後,仔細審閱發現,原來是本身第13行的else級別不對,由於在題目中能夠看到user.txt第一行數據是
用戶名|密碼
因此第10行的for循環以後,第一個出現的是 用戶名|密碼 這個數據,我輸入的又是zrh_ 1 後面第12行的語句中有一個 and 語句
and具備惰性求值,我輸入user不等於 用戶名,就會執行第13行的else了,因而乎便出現了問題
階段三:
改正以後作了可行性的代碼優化
1 list_1 = [] 2 with open("user.txt",mode="r+",encoding="utf-8") as count: 3 user = input("用戶名:") 4 passwd = input("密碼:") 5 for i in count: 6 val_1 = i.strip().split("|") 7 list_1.append(val_1[0]) 8 if user in list_1: 9 count.seek(0) 10 for line in count: 11 val = line.strip().split("|") 12 if user == val[0]: 13 if passwd == val[1]:print("登錄成功") 14 else:print("密碼錯誤") 15 else: 16 print("無此用戶名")
ok,這個題到此結束
感悟:之後遇到問題要心平氣和的排查問題,千萬不要懷疑本身不適合幹編程
牢記文件操做時的指針位置對程序的影響,牢記for循環後的else的邏輯