10 Python登入練習2

2021-10-24 17:30:12 字數 3743 閱讀 5807

讓使用者輸入賬號和密碼

如果賬號密碼匹配,則提示歡迎資訊並退出程式

如果賬號不存在,則提示賬號不存在並重新回到步驟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 格式化無符...