编写登录功能,能登录多个用户,从文件中比对用户名和密码,同一个账号输错3次将被锁定300秒
账户文件为user.txt
从左往右依次是: 用户名:密码:输错计数:解除锁定的时间(初始默认为0)
内容如下:
cc:111:0:0
jason:222:0:0
jack:333:0:0
lily:444:0:0
程序如下:
import os
import time
user_list = []
with open('user.txt', mode='r', encoding='utf-8') as f:
for line in f:
name, *_ = line.strip('\n').split(':')
user_list.append(name)
tag = True
while tag:
print(user_list)
inp_name = input("请输入你的用户名:").strip() # 判断用户名是否存在
if inp_name in user_list:
with open('user.txt', mode='rt', encoding='utf-8') as f1, \
open('new_info.txt', mode='wt', encoding='utf-8') as f2:
for line in f1:
if inp_name in line:
old_line = line
old_user = line.strip('\n').split(':')
count = int(old_user[2])
now_time = time.time()
if now_time > float(old_user[3]):
inp_pwd = input("请输入你的密码:").strip()
if inp_pwd == old_user[1]:
print('登录成功!')
f1.seek(0, 0) # 调到文件开头重新读
data = f1.read()
f2.write(data) # 创建一个新文件复制写入user.txt的全部内容
tag = False
break # 退出for循环执行覆盖操作
else:
print('密码错误')
now_time = time.time()
count += 1
old_user[2] = str(count)
if count == 3:
lock_time = now_time + 300 # 当前时间往后顺延300秒,记录到文件中,更改原时间
old_user[3] = str(lock_time)
new_line = ':'.join(old_user) + '\n'
f1.seek(0, 0) # 指针跳到开头
data = f1.read()
res = data.replace(old_line, new_line)
f2.write(res)
break
else:
print('当前用户输入错误超过3次,已经被锁定,请稍后再试')
continue # 不执行下面的覆盖文件操作
os.remove('user.txt')
os.renames('new_info.txt', 'user.txt')
else:
print('用户名不存在,请重新输入')