python-犯傻合集
- 2019 年 10 月 20 日
- 筆記
1.題目:
基於文件實現用戶登錄程式,提示用戶輸入用戶名和密碼,檢查用戶名是否存在,以及用戶名密碼是否正確
保存密碼的文件叫user.txt,內容:
| 作分隔符
階段一:
自己第一次的答案:
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("無此用戶名")
輸出結果:
(1)可以順利運行檢查用戶名不存在的程式
(2)但是當輸入正確的用戶名和答案的時候,出現了問題
心裡os: 明明我輸入的用戶名和密碼是正確的為什麼沒有print正確的結果,而是沒有任何值呢,我****,到底哪裡出現了問題
我檢查了半天,還是沒有檢查出來,就開始心煩氣躁,開始懷疑自己是不是不適合編程。
等到冷靜下來的時候,原來才發現是指針出現了問題,第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的邏輯