讓使用者輸入賬號和密碼
如果賬號密碼匹配,則提示歡迎資訊並退出程式
如果賬號不存在,則提示賬號不存在並重新回到步驟1
如果密碼不匹配,則提示密碼錯誤並重新回到步驟1
如果密碼連續錯誤3次以上,則提示賬號已被鎖定
附加要求:
使用者資訊儲存在json檔案中
密碼md5加密儲存
賬號鎖定時間為2分鐘
使用者資料檔案user.txt
,"zheng"
:}
python**
import json
import hashlib
import time
defload_user
(path=
'user.txt'):
""" 載入使用者資料
:param path:
:return:
"""with
open
(path,
'r')
as read_file:
user_items=json.load(read_file)
return user_items
defauth
(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)
user_passwd=user_obj.get(
'passwd'
) user_errors=
int(user_obj.get(
'errors'))
user_last_time=
float
(user_obj.get(
'lock_time'))
#對登入時輸入的密碼進行md5加密
md5=hashlib.md5(
) md5.update(pwd.encode())
pwd_md5=md5.hexdigest(
)#密碼匹配
if pwd_md5==user_passwd:
#賬號沒有被鎖定
if time.time(
)-user_last_time>lock_time or user_errors<3:
print
('登入成功,歡迎[%s]'
% name)
#修改使用者名單中的登入錯誤次數
modify_user(name,
'clear_error'
)return
true
#賬號被鎖定
else
:print
('賬號被鎖定,請等候[%f]秒後重試'
%(lock_time-
(time.time(
)-user_last_time)))
#密碼不匹配
else
:#錯誤次數小於3:提示登入失敗,新增登入錯誤次數
if user_errors+
1<3:
print
('密碼錯誤,請重新輸入'
)# 修改使用者名單中的登入錯誤次數
modify_user(name,
'add_error'
)#在本次失敗之前,已存在2次失敗,新增登入錯誤次數
elif user_errors+1==
3:print
('密碼已連續3次錯誤,賬號被鎖定,請重新輸入'
)# 修改使用者名單中的登入錯誤次數
modify_user(name,
'add_error'
)#已鎖定狀態,但已過限制時間,重新計算登入錯誤次數
elif time.time(
)-user_last_time>lock_time:
print
('密碼錯誤,請重新輸入'
)#修改使用者名單中的登入錯誤次數,先清除再加1
modify_user(name,
'clear_error'
) modify_user(name,
'add_error'
)#已鎖定狀態,還未過限制時間,提示已鎖定
else
:print
('密碼錯誤,賬號已被鎖定,請等候[%f]秒後重試'
%(lock_time-
(time.time(
)-user_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 mode==
'clear_error'
: user_obj[
'errors']=
0 user_obj[
'lock_time']=
0.0#錯誤次數自增1,如果錯誤次數==3,新增鎖定時間
else
: errors=
int(user_obj.get(
'errors'))
+1user_obj[
'errors'
]=errors
if errors==3:
user_obj[
'lock_time']=
float
(time.time())
#將使用者資料重新寫入user.txt檔案中
with
open
('user.txt'
,'w'
)as write_file:
json.dump(user_items,write_file,ensure_ascii=
false
,indent=4)
deflogin()
:"""
登入:return:
"""while
true
: user_name=
input
("請輸入使用者名稱:"
) passwd=
input
("請輸入密碼:")if
(auth(user_name,passwd,
120)):
break
if __name__==
'__main__'
: login(
)
10 python 條件控制 if
1.概述 條件語句是通過一條或多條語句的執行結果 true或者false 來決定執行的 塊。條件語句的執行過程圖 2.條件控制語句語法 python中使用 if語句實現條件控制 語法 if 判定條件 執行語句1elif 判定條件 執行語句2elif 判定語句 執行語句3 else 執行語句x注意的點...
python學習筆記 (10)python中的詞典
1 詞典的基本概念和建立 python中的詞典是乙個類,詞典是用來儲存多個元素的,儲存多個元素的物件稱作容器 container 建立詞典的方法舉例 dic print type dic print dic jack 注 1 由例可見,詞典和表很相似,都是可以包含多個元素的類,元素均以逗號來分隔,學...
(10)python字元格式化
學習筆記,無任何意義。c 格式化字元及其ascii碼 print a is c 我 a is 我 print a is c q a is q s 格式化字串 print 我和你 is s 你和我 我和你 is 你和我 d 格式化整數 print 20 40 d 60 20 40 60 u 格式化無符...