《Python核心編程》第二版第405頁第十三章練習 續二 -Python核心編程答案-自己做的-

來源:互聯網
上載者:User

這是自己做的練習,可能有錯誤,歡迎討論和各種最佳化重構方案。
根據讀者反饋,或者code review,我對本篇文章答案或者相關內容的更新補充,一般會被添加在本篇部落格的評論中。
我盡量保證每題的答案代碼是完整的,不僅僅是函數或者類,開啟Python 2.7的IDLE,將代碼完整拷貝進去,就能調試運行。
歡迎訪問Balian在部落格園的家http://www.cnblogs.com/balian

13-4.
使用者註冊。建立一個使用者資料庫(包括登入名稱、密碼和上次登入時間戳記)類(參考練習7-5和練習9-12),來管理一個系統。該系統要求使用者在登入後才能訪問某些資源。這個資料庫類對使用者進行管理,並在執行個體化操作時載入之前儲存的使用者資訊,提供訪問函數來添加或更新資料庫的資訊。在資料修改後,資料庫會在記憶體回收時將新資訊儲存到磁碟(參見__del__())。
【注】
我使用D盤EX13_4檔案夾裡的accounts.txt檔案記錄使用者名稱和密碼。只有一個使用者Balian,密碼是apple。用同位置的檔案userlog.txt記錄上次登入時間戳記。如果使用者Balian登陸正確,就返回上次登陸時間,和登陸成功資訊。如果使用者名稱或者密碼錯誤,都將提示登陸失敗,失敗3次退出程式。對使用者進行管理指如果登陸成功,可更新密碼。這樣做的目的是想使代碼盡量簡單,畢竟這隻是一個練習題。
accounts.txt檔案內容(僅一行)
balian 123456
userlog.txt為一個空文字檔
運行程式前,請提前準備以上的檔案夾和檔案。

【答案】
代碼如下:

#-*- encoding: utf-8 -*-class DBMnagement(object):    '資料庫管理類'        def __init__(self, nm, pwd):        self.name = nm        self.password = pwd            def updatePWD(self, newpwd):        self.password = newpwd            def __del__(self):        pass        #import osimport timedef CreateLog(username):    '登陸成功寫時間戳記到log檔案'    timeStamp = time.ctime(time.time())    log = 'User' + ' - ' + username + ', last time login Succeed at ' + timeStamp + '\n'    logFile = open('d:\\EX13_4\\userlog.txt', 'a')    logFile.write(log)    logFile.close()        def ReadLog():    '登陸成功,從log檔案讀取上次時間戳記'    logFile = open('d:\\EX13_4\\userlog.txt')    logInfo = logFile.readlines()    if len(logInfo) >= 1:        print logInfo[-1]    logFile.close()     def ChangePWDinLog(username, newpwd):    '修改使用者密碼'    credentialFile = open('d:\\EX13_4\\accounts.txt', 'w')     credentialtxt = username + ' ' + newpwd    credentialFile.write(credentialtxt)    credentialFile.close()    print '密碼已修改 ... Password updated successfully. \n'# 從這裡開始是主程式print '歡迎使用最簡單的使用者管理系統'print '嘗試用系統中已經存在的使用者名稱和密碼登入,有三次機會'print '登陸成功後輸入 updatepwd 命令可以修改密碼,成功後退出系統'print '登陸成功後輸入 quit 命令退出系統\n'    credentialFile = open('d:\\EX13_4\\accounts.txt') # 從文字檔中擷取使用者名稱和密碼credentialInfo = credentialFile.readlines()credentialFile.close()usernameinDB = credentialInfo[-1].split()[0] # 這裡credentialInfo[-1]是一個字串,包括使用者名稱和口令,空格隔開的passwordindm = credentialInfo[-1].split()[1]errorTimes = 3while errorTimes:    print '請輸入使用者名稱和密碼:'    input_username = raw_input('Username ... :  ')    input_password = raw_input('Password ... :  ')    if input_username == usernameinDB and input_password == passwordindm:        print '登陸成功  ... Login Successful'        CurrentUser = DBMnagement(input_username, input_password)        ReadLog()        CreateLog(input_username)        input_command = raw_input('請輸入你的命令, quit or updatepwd ... \n')        if input_command == 'quit':            del CurrentUser            print '\n已退出系統  ... Logout successfully.'            break        elif input_command == 'updatepwd':            newpwd = raw_input('\n請輸入新密碼, new password ... :  ')            CurrentUser.updatePWD(newpwd)            ChangePWDinLog(CurrentUser.name, CurrentUser.password)            del CurrentUser            print '\n已退出系統  ... Logout successfully.'            break        else:            print '錯誤命令  ... Wrong Command'            del CurrentUser            print '\n已退出系統  ... Logout successfully.'            break    else:        print '使用者名稱或口令錯誤  ... Wrong Username or Password.\n'        errorTimes -= 1        if errorTimes == 0: print '已退出系統  ... Logout successfully.'         

【執行結果】

歡迎使用最簡單的使用者管理系統嘗試用系統中已經存在的使用者名稱和密碼登入,有三次機會登陸成功後輸入 updatepwd 命令可以修改密碼,成功後退出系統登陸成功後輸入 quit 命令退出系統請輸入使用者名稱和密碼:Username ... :  balianPassword ... :  123使用者名稱或口令錯誤  ... Wrong Username or Password.請輸入使用者名稱和密碼:Username ... :  balianPassword ... :  123456使用者名稱或口令錯誤  ... Wrong Username or Password.請輸入使用者名稱和密碼:Username ... :  balianPassword ... :  apple登陸成功  ... Login SuccessfulUser - balian, last time login Succeed at Wed Sep 12 12:32:35 2012請輸入你的命令, quit or updatepwd ... updatepwd請輸入新密碼, new password ... :  egg密碼已修改 ... Password updated successfully. 已退出系統  ... Logout successfully.                                

【參考】

http://blog.csdn.net/lgfei/article/details/92044
Python中寫文字檔的方法

http://magustest.com/blog/softwaretesting/how-to-write-a-file-by-using-python/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.