使用Python 3 實現簡易用戶登錄系統,輸錯三次密碼鎖定賬號。
文件結構:
lock.txt
保存被鎖定的用戶,一行一個
users.txt
保存用戶賬號密碼,按照以下格式
{"jack":"1234","tom":"123","alex":"12345"}
login.py
import getpass # 使用getpass模塊,輸入密碼的時候是密文
import json
username = input("input username:")
with open("users.txt",'r') as f: # 用戶表,保存用戶名和密碼
contents = f.read()
users = json.loads(contents) # convert to dict type
with open("lock.txt",'r') as lock_file: # lock.txt保存被鎖定用戶,這里讀取出來用於判斷用戶輸入的賬號是否已經被鎖定
lock_users = lock_file.readlines()
lock_user_list=list()
for lock_user in lock_users:
lock_user_list.append(lock_user.strip()) # 轉換成列表,並去除每個元素后面的換行符
if username in lock_user_list:
print("your account {username} has been locked, please contact the administrator.".format(username=username)) # 字符串格式化,在lock.txt直接退出
exit()
count = 0 # 計數器,用於統計用戶輸入密碼次數
count_left = 3 # 還剩幾次
if username in users: # 外層循環,判斷用戶是否存在,不存在直接退出,存在則進入密碼輸入環節
while count < 3: # 計數3次
#password = input("input your password:")
password = getpass.getpass("input your password:") # getpass模塊
if password == users[username]:
print("welcome aboard, {username}!".format(username = username))
break
else:
count_left -= 1
while count_left:
print("invalid password, try again and {count_left} times left!".format(count_left=count_left))
break
count += 1
else:
print("invalid password, try maximum times, your account has been locked.") # 嘗試超過最大次數限制,鎖定賬戶,將username存進lock.txt,一行一個
block = open("lock.txt","a")
block.write(username+'\r')
block.close()
else:
print("no such username: {username}, exit.".format(username=username))
exit()