python從入門到精通(DAY 3)

來源:互聯網
上載者:User
要求:編寫登陸介面

輸入使用者名稱密碼
認證成功後顯示歡迎資訊
輸錯三次後鎖定

針對此執行個體寫了有二種類型的指令碼,略有不同,具體如下:

帳號檔案account.txt內容如下:

sam 123

david 12
kevin 123
lin 12
tailen 123
jack 12

鎖檔案account_lock.txt預設為空白

一、只針對帳號檔案裡的使用者進行判斷並鎖定,針對使用者和密碼各有三次錯誤重試機會。

1、流程圖如下:

代碼如下:

#!/usr/bin/python27#_*_ coding:utf-8 _*_import sys,os,getpassos.system('clear')i = 0while i < 3:                            #只要使用者登入異常不超過3次就不斷迴圈  name = raw_input("請輸入使用者名稱:")  lock_file = open('account_lock.txt','r+')            #當使用者輸入使用者名稱後,開啟LOCK 檔案 以檢查是否此使用者已經LOCK了  lock_list = lock_file.readlines()  for lock_line in lock_list:                   #迴圈LOCK檔案     lock_line = lock_line.strip('\n')              #去掉分行符號    if name == lock_line:                    #如果LOCK了就直接退出      sys.exit('使用者 %s 已經被鎖定,退出' % name)   user_file = open('account.txt','r')               #開啟帳號檔案   user_list = user_file.readlines()                  for user_line in user_list:                   #對帳號檔案進行遍曆    (user,password) = user_line.strip('\n').split()       #分別擷取帳號和密碼資訊    if name == user:                      #如使用者名稱正常匹配      j = 0      while j < 3:                      #只要使用者密碼異常不超過3次就不斷迴圈        passwd = getpass.getpass('請輸入密碼:')       #輸入隱藏密碼        if passwd == password:               #密碼正確,提示歡迎登入          print('歡迎登入管理平台,使用者%s' % name)              sys.exit(0)                   #正常退出        else:          print('使用者 %s 密碼錯誤,請重新輸入,還有 %d 次機會' % (name,2 - j))        j += 1                       #密碼輸入錯誤後,迴圈值增加1      else:        lock_file.write(name + '\n')            #密碼輸入三次錯誤後,將該使用者追加到LOCK檔案        sys.exit('使用者 %s 達到最大登入次數,將被鎖定並退出' % name)    else:      pass                          #當使用者沒匹配時,跳過並繼續迴圈  else:    print('使用者 %s 不存在,請重新輸入,還有 %d 次機會' % (name,2 - i))  i += 1                             #當使用者輸入錯誤時,迴圈值增加1else:  sys.exit('使用者 %s 不存在,退出' % name)              #使用者輸入三次錯誤後,異常退出      lock_file.close()                          #關閉LOCK檔案user_file.close()                          #關閉帳號檔案

二、針對帳號檔案裡的不存在的使用者也可以進行判斷並鎖定,針對使用者和密碼共有三次錯誤重試機會

代碼如下:

#_*_ coding:utf-8 _*_import sys,os,getpassos.system('clear')retry_limit = 3retry_count = 0account_file = 'account.txt'lock_file = 'account_lock.txt'while retry_count < retry_limit:                     #只要重試不超過3次就不斷迴圈  username = raw_input('\033[31;43mUsername:\033[0m')  username = username.strip()  lock_check = open(lock_file)                     #當使用者輸入使用者名稱後,開啟LOCK 檔案 以檢查是否此使用者已經LOCK了  for line in lock_check.readlines():                 #迴圈LOCK檔案     if username == line.strip('\n'):                 #去掉分行符號      sys.exit('\033[35mUser %s is locked!!!\033[0m' % username)  #如果LOCK了就直接退出  password = raw_input('\033[32;41mPassword:\033[0m')         #輸入密碼  f = open(account_file,'r')                      #開啟帳號檔案   match_flag = False                          # 預設為Flase,如果使用者match 上了,就設定為 True  for line in f.readlines():                          user,passwd = line.strip('\n').split()              #去掉每行多餘的\n並把這一行按空格分成兩列,分別賦值為user,passwd兩個變數    if username == user and password == passwd:           #判斷使用者名稱和密碼是否都相等      print('hello, %s !!' % username)      match_flag = True                       #相等就把迴圈外的match_flag變數改為了True      break                             #然後就不用繼續迴圈了,直接 跳出,因為已經match上了  f.close()  if match_flag == False:                       #如果match_flag還為False,代表上面的迴圈中跟本就沒有match上使用者名稱和密碼,所以需要繼續迴圈    print('sorry,%s is unmatched' % username)    retry_count += 1                         #計數器加1  else:    print('wlecome login my learning system!')    break                              #使用者成功登入,退出指令碼else:  print("you account %s is locked!!!" % username)  g = open(lock_file,'a')  g.write(username)                          #被鎖使用者追加到使用者鎖檔案  g.write('\n')    g.close()
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.