作業要求:
1、輸入用戶名和密碼
2、輸錯三次密碼就鎖定用戶拉入黑名單
3、認證成功后輸出歡迎信息
現有知識掌握解題,首先創建兩個文件:
1.創建用戶黑名單文本user_lock.txt
user_lock=open("user_lock.txt","w") user_lock.write("jake\n")#隨意先寫進去幾個黑名單 user_lock.write("jason\n") user_lock.close()
2.創建可登陸用戶密碼列表文本user_pwd.txt
user_list=['lily','000000','lucy','111111','mike','222222'] user=str(user_list)
#調試zuoye1.py時,發現userpwd的輸出結果為:["['lily'", " '000000'", " 'lucy'", " '111111'", " 'mike'", " '222222']"]
user=user.replace("[","")#去掉[ user=user.replace("'","")#去掉" user=user.replace("]","")#去掉],userpwd的輸出結果為:['lily', ' 000000', ' lucy', ' 111111', ' mike', ' 222222']
user=user.replace(" ","")#去掉空格,userpwd的輸出結果終於為:['lily', '000000', 'lucy', '111111', 'mike', '222222']
user_pwd=open("user_pwd.txt","w")
user_pwd.write(user)
user_pwd.close()
以上創建好后,可供后面程序讀寫判斷,才能玩得起來,下面就是作業的內容了:
zuoye1.py
while 1:#我只是單純滴想讓用戶在以下幾種情況下,如果想再嘗試輸入別的用戶名和密碼都可以再次輸入,其他知識暫且不會也沒多想哈哈 user_lock=open("user_lock.txt","r+")#讀取黑名單 userlock=user_lock.read().split() user_pwd=open("user_pwd.txt","r+")#讀取用戶名密碼列表 userpwd=user_pwd.read().split(',')#需要將['lily,000000,lucy,111111,mike,222222']分隔為各個list元素 login_user=input("please input your username:") if login_user in userlock:#如果是黑名單中的賬號 print("Locked")#信息提示已鎖,返回到請輸入用戶名 elif login_user not in userpwd:#如果不是黑名單中的也不是正常賬戶列表中的 print("User does not exist")#信息提示不存在此用戶名,返回到請輸入用戶名 else:#最后一種情況就是屬於正常賬戶列表中的 for i in range(3):#最多進行三次密碼輸入驗證 loginpwd=input("please input your password:") if loginpwd==userpwd[userpwd.index(login_user)+1]:#如果和userpwd中該用戶login_user的密碼相匹配 print("Welcome,%s!"%(login_user))#歡迎 break#跳出for循環,返回用戶名輸入
elif i==2 and loginpwd!=userpwd[userpwd.index(login_user)+1]:#如果輸入第三次后,依然和密碼不匹配 print("LOCKED")#信息提示賬號被鎖 user_lock.write(login_user+'\n')#隨即寫入user_lock.txt文本文件 break#跳出for循環,返回用戶名輸入
else:#輸入第一次不匹配密碼,輸入第二次不匹配密碼 print("WRONG!")#每次都給出信息提示賬號錯誤,返回請輸入密碼,直到第三次密碼也不對即執行上面的elif內部語句 continue#跳出本次循環,繼續執行for的下一次循環 user_pwd.close() user_lock.close()
作業總結:
1.本次作業,花費我最長時間的就是不理解怎么把用戶密碼列表中的密碼和用戶進行匹配從而進行判斷,通過看http://www.cnblogs.com/sanjiang/p/5089400.html,想起使用list的userpwd.index(login_user)+1,如有神助,順利解決這個問題
2.還通過該博客和網上學習,了解並運用了.split()分割用法,雖然很粗淺,以后用到更深的再現學吧
3.忘了怎么知道的.replace(),成功解決了讓我花費很久很久的列表顯示問題,才能得以正常去判斷用戶名
最感謝的還是單位同事,做C#開發的,教會了我怎么去調試程序,才知道調試是多么的有必要和多強大哈哈哈,終於解決了我遇到的前三個問題,老司機帶路,棒棒噠!