要求
- 输入账号密码完成验证,验证通过后输出"登录成功"
- 可以登录不同的用户
- 同一账号输错三次锁定(附加功能,在程序一直运行的情况下,一旦锁定,则锁定5分钟后自动解锁)
- 扩展需求:在3的基础上,完成用户一旦锁定,无论程序是否关闭,都锁定5分钟
import time, os, datetime
user_pwd = {"egon":"root123", "mac":"13579", "tank":"root"}
user_info = {"egon":0, "mac":0, "tank":0}
def file(filename):
with open(f'{filename}.txt', 'w', encoding='utf-8') as f:
f.write("unlock " + "None " + "None")
def readfile(filename):
with open(f'{filename}.txt', 'r', encoding='utf-8') as f:
all = f.read()
a = all.split()
return a
def lock(name):
user_info[name] = "lock"
print("你的账号已被锁定,需要等待20秒")
now_times = time.time()
with open(name+'.txt', 'w', encoding='utf-8') as f:
f.write("lock "+name+" "+ str(now_times))
def locked(filename):
if os.path.exists(f'{filename}.txt'):
f,n,t=readfile(filename)
return f,n,t
else:
file(filename)
f,n,t=readfile(filename)
return f, n, t
def check(upwd,pwd):
if upwd != pwd:
print("用户密码错误")
return 0
else:
print("登录成功")
return 1
def difftime(locktime):
curtime = datetime.datetime.now()
pwd_time = datetime.datetime.fromtimestamp(float(locktime))
difftime = (curtime - pwd_time).seconds
return difftime
while True:
userName = "".join(input("请输入用户名:").split())
password = "".join(input("请输入用户密码:").split())
diff_time = times = 0
flag = name = ''
if userName in user_pwd:
flag, name, times = locked(userName)
else:
print("用户不存在")
continue
if flag == "lock":
diff_time = difftime(times)
if diff_time < 20:
print("你的账号已被锁定,需等待%s秒" % (20-int(diff_time)))
continue
else:
file(userName)
user_info[userName] = 0
f = check(user_pwd.get(userName), password)
if f:
break
user_info[userName] += 1
else:
f = check(user_pwd.get(userName), password)
if f:
break
user_info[userName] += 1
if user_info.get(userName) == 3:
lock(userName)
注意:为了测试,时间改为20秒