需求:
1.輸入用戶名密碼
2.認證成功后顯示歡迎信息
3.輸錯三次后鎖定
實現思路:
1.判斷用戶是否在黑名單,如果在黑名單提示賬號鎖定。
2.判斷用戶是否存在,如果不存在提示賬號不存在。
3.判斷賬號密碼是否正確,如果正確登錄進去。如果不正確有三次輸入密碼機會。三次全部輸錯,賬號鎖定。
方法一:(簡易版本)
count = 0
username = "xuyuanyuan"
password = "123"
with open("file.txt",mode="r",encoding="utf8") as f:
file_list=f.readlines()
name=input("請輸入用戶名:")
#判斷輸入用戶名是否在黑名單中
if name in file_list:#如果用戶名在黑名單內
print("您的賬戶已鎖定,請聯系管理員!")
else:
#判斷用戶名是否存在
if name == username:
while count < 3:
pwd = input("請輸入您的密碼:")
if pwd == password:
print("welcome %s" %name)
break
else:
print("password is error!")
count+=1
else:#如果用戶名輸入錯誤超過三次的話,就將用戶名加入到黑名單file.txt文件里
print("您輸入的次數已經超過三次,賬號已鎖定,請聯系管理員!")
with open("file.txt", mode="a+", encoding="utf8") as f:
test=("%s"%name)
f.writelines(test)
else:
print("該用戶名不存在,請重新輸入!")
方法二:
# 獲取注冊用戶的信息
with open("db", "r", encoding="UTF-8") as f:
# users = f.readlines() # 讀成列表
# users = f.read() # 讀到內存
users = {}
for line in f:
user_list = line.strip().split("|") # 分割得到列表
# print(user_list)
users[user_list[0]] = {#往字典里加內容
"username": user_list[0],
"passwd": user_list[1],
"times": user_list[2],
}
# print(users)
# # 讀取黑名單
black_list = []
with open("blacklist.txt", "r", encoding="UTF-8") as f2:
for line in f2:
black_list.append(line.strip())
# print(black_list)
#
while True:
# 獲取用戶輸入
username = input("用戶名:").strip()
passwd = input("密碼:").strip()
# 判斷是不是黑名單用戶
if username in black_list:
print("用戶名已被鎖定,請聯系管理員!")
# 把用戶信息再寫回文件
with open("db", "w", encoding="UTF-8") as f4:
for j in users:#遍歷的是字典里的key
f4.write(users[j]["username"] + "|" + users[j]["passwd"] + "|" + str(
users[j]["times"]) + "\n")
# 字典是無序的
# f4.write("|".join([lambda x: str(x) for x in users[j].values()])+ "\n")
break
# 判斷用戶名存不存在
elif username in users:
if passwd == users[username]["passwd"]:
print("登錄成功")
# 把之前的錯誤次數清空
users[username]["times"] = 0
# 把用戶信息再寫回文件
with open("db", "w", encoding="UTF-8") as f4:
for j in users:
# users[j]是每個用戶的字典
f4.write(users[j]["username"] + "|" + users[j]["passwd"] + "|" + str(users[j]["times"]) + "\n")
break
else:
print("用戶名密碼錯誤")
# 判斷輸錯次數
users[username]["times"] = int(users[username]["times"]) # 轉成int類型
users[username]["times"] += 1
if users[username]["times"] >= 3:
print("用戶名被鎖定啦!")
# 加入黑名單
black_list.append(username)
with open("blacklist.txt", "w") as f3:
for i in black_list:
f3.write(i+"\n")
# 把用戶信息再寫回文件
with open("db", "w", encoding="UTF-8") as f4:
for j in users:
# users[j]是每個用戶的字典
f4.write(users[j]["username"] + "|" + users[j]["passwd"] + "|" + str(
users[j]["times"]) + "\n")
break
else:
print("用戶名不存在")