python犯傻之基於文件操做的疏忽及改正

題目:編程

基於文件實現用戶登陸程序,提示用戶輸入用戶名和密碼,檢查用戶名是否存在,以及用戶名密碼是否正確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的邏輯

相關文章
相關標籤/搜索