<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                >[info] 本練習,是根據前面學習的知識而設置,請獨立完成功能。如果你還無法獨立完成以下練習,則證明還沒有掌握前面的章節,好好回顧一下吧。 ## 題目要求: >[success] >1. 讓用戶輸入賬號與密碼 >2. 如果賬號密碼匹配(用戶名:Milton,密碼:123456),則提示歡迎信息,退出程序 >3. 如果賬號不存在,則提示賬號不存在,重新回到步驟1 >4. 如果密碼不匹配,則提示密碼有誤,重新回到步驟1 >5. 密碼連續錯誤3次以上,提示賬號已被鎖定,重新回到步驟1 > >附加要求: >1. 用戶信息保存在json文件中 >2. 密碼md5加密保存 >3. 賬號鎖定時間為2分鐘 >4. 充分使用函數編程 > ## 規則 * 請獨立完成實戰要求,完成后再參考下面的示例代碼 * 如果覺得自己的代碼<span style="color:red">*更加優雅,更加高效*</span>,歡迎留言**,與大家一起**分享**哦~ :-: <span style="color:green;font-size:30;">一起來挑戰吧~</span> <br> ## 參考代碼 用戶數據文件 user.txt 內容如下:(pwd的值為md5(“123456”)) ```cmd { "Milton": { "pwd": "e10adc3949ba59abbe56e057f20f883e", "errors": 1, "lock_time": 0.0 }, "Cherish": { "pwd": "e10adc3949ba59abbe56e057f20f883e", "errors": 0, "lock_time": 0.0 } } ``` python代碼如下: ```python #!/usr/bin/python # coding=utf-8 import json import time import hashlib def load_user(path="user.txt"): """ 載入用戶數據 :param path: :return: """ with open(path, "r") as read_file: user_items = json.load(read_file) return user_items def auth(name,pwd,lock_time=120): """ 用戶鑒權 :param name: :param pwd: :param lock_time: :return: """ user_items=load_user() if name in user_items.keys(): # 用戶名匹配 user_obj=user_items.get(name) errors = int(user_obj.get("errors")) last_time = float(user_obj.get("lock_time")) r_pwd=user_obj.get("pwd") # 對登錄時輸入的密碼進行md5加密 md5 = hashlib.md5() md5.update(pwd.encode()) pwd = md5.hexdigest() if pwd == r_pwd: # 密碼匹配 if time.time() - last_time > lock_time or errors < 3: print("Dear [%s],welcome~" % name) modify_user(name, "clear_error") return True else: print("您賬號已被鎖定,請等候 [%f]s 后重試!" % (lock_time - (time.time() - last_time))) else: # 密碼不匹配 if errors+1 < 3: # 錯誤次數小于3:提示登錄失敗,添加登錄錯誤次數 print("您的密碼不正確,未被鎖定,請重新輸入!") modify_user(name, "add_error") elif errors+1==3: # 在本次失敗之前,已存在2次失敗 print("您已經連續3次登錄失敗,賬號已被鎖定,請重新輸入!") modify_user(name, "add_error") elif time.time() - last_time > lock_time: # 已鎖定狀態,并且限制時間已過期:重新計算錯誤次數 print("您的密碼不正確,賬號已被鎖定,請重新輸入!") modify_user(name, "clear_error") modify_user(name, "add_error") else: # 已鎖定狀態,處于限制時間之內:提示已鎖定 print("您的密碼不正確,賬號已被鎖定,請等候 [%f]s 后重試!" % (lock_time - (time.time() - last_time))) else: # 用戶名不匹配 print("您的用戶名未存在!") def modify_user(name, mode="add_error"): """ 修改用戶名單中的登錄錯誤次數 :param name: 用戶名稱 :param mode:add_error,登錄錯誤次數自增1;clear_error,登錄錯誤次數重置為0 :return: """ # 載入用戶數據 user_items = load_user() user_obj = user_items.get(name) if user_obj: if mode=="clear_error": # 清空錯誤次數與鎖定時間 user_obj["errors"]=0 user_obj["lock_time"]=0.0 else: # 錯誤次數自增1,如果錯誤次數==3時,添加鎖定時間 errors = int(user_obj.get("errors"))+1 user_obj["errors"]=errors if errors==3: user_obj["lock_time"] = float(time.time()) # print(user_items) # 將用戶數據(json格式化格式)重新寫入txt文件 with open("user.txt", "w") as fp: json.dump(user_items,fp,ensure_ascii=False,indent=4) def login(): """ 登錄 :return: """ while True: user_name = input("Name:") pwd = input("PASS:") if auth(user_name, pwd, 120): break if __name__ == '__main__': login() ``` ### 參考流程圖 ![](https://box.kancloud.cn/a03f4d080a262f55d8c1f6a214e21136_1024x1127.jpg) <hr style="margin-top:100px"> :-: ![](https://box.kancloud.cn/2ff0bc02ec938fef8b6dd7b7f16ee11d_258x258.jpg) ***微信掃一掃,關注“python測試開發圈”,了解更多測試教程!***
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看