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的邏輯