# 定义列表,存放已经注册的用户信息
userlist = [] # 存放所有的用户名
pwdlist = [] # 存放所有的用户名对应的密码
blacklist = [] # 存放所有的黑名单用户
# 读取所有数据的方法
def readallusers():
with open('user.txt', 'r', encoding='utf-8') as f:
f.seek(0) # 光标定位到user.txt文件的头部
res = f.readlines() # 读取文件的所有数据 返回列表 列表每一个元素是文件的一行数据
for i in res:
j = i.strip() # 处理每一个换行 admin:123456\n ==>admin:123456
arr = j.split(":") # 以admin:123456中的:来分割数据,返回列表形式 [admin,123456]
userlist.append(arr[0]) # 把用户名添加到列表
pwdlist.append((arr[1])) # 把密码添加到列表
# print(userlist) #['admin', 'chun', 'zhangsan'] 测试用
# print(pwdlist) #['123456', '666666', '888888'] 测试用
with open('blackuser.txt', 'r', encoding='utf-8') as f:
f.seek(0)
res = f.readlines()
for i in res:
blacklist.append(i.strip()) # 黑名单只有名字,不会存密码
# print(blacklist) 测试用
# readallusers()
# 注册
def register():
# 定义一个变量,控制外循环
site = True
while site:
# 用户输入用户名
name = input("请输入用户名:")
# 用户名需要检测是否已经存在
if name in userlist:
# 用户名存在,则需要重新输入用户名
print("此用户已经存在,请重新输入!")
# 用户名不存在
else:
# 循环输入密码,直到输入正确,退出循环
while True:
# 输入密码
pwd = input("请输入密码:")
# 检测密码长度不能低于3
if len(pwd) > 3:
# 密码长度大于3,则需要再次输入密码
repwd = input("请再次输入密码:")
# 检测确认密码与密码是否一致
if pwd == repwd:
# 用户名、密码正确,就可以写入文件。格式-》用户名:密码
with open('user.txt', 'a+', encoding='utf-8') as f:
# f.seek(0, 2) # 2代表把光标定位到文件末尾 0代表左右移动0位。
# 输出格式print(f'{}') 单引号才生效,双引号无法生效
f.write(f'{name}:{pwd}\n')
print("注册成功,用户名{}。".format(name))
# 结束循环
# 结束外循环
site = False
# 结束内循环
break
else:
print("两次密码输入不一致。")
else:
print("输入的密码长度应该大于3,请重新输入!")
# 登录
def login():
# 错误次数最多3次
num = 3
site = True
while site:
name = input("请输入需要登录的名称:")
if name in userlist:
# 检测输入的用户是否在用户列表中,如果在则再校验是否也存在在黑名单中
if name in blacklist:
# 在黑名单,则需要重新输入用户名
print("该用户已列入黑名单,不允许登录平台!")
else:
while True:
# 不在黑名单,则输入密码
pwd = input("请输入密码:")
# 判断输入的密码与user.txt里的密码是否一致
# 通过.index(输入的用户名)得到索引inx
inx = userlist.index(name)
# 通过pwdlist[inx]得到对应的密码
if pwd == pwdlist[inx]:
print("登录成功")
site = False
break
else:
# 密码不正确,则减少一次输入密码的次数
num -= 1
# 次数小于0次,则不允许输入。
if num == 0:
print("3次机会已使用完,该用户将被锁定!")
# 密码输入三次失败后,需要把该用户加入黑名单
with open('blackuser.txt', 'a+', encoding='utf-8') as f:
f.write(f'{name}\n')
site = False
break
else:
print("密码不正确,请重新输入密码,你还有%d次机会输入密码" % (num))
else:
print("用户不存在,请重新输入!")
# 调用注册
# register()
#调用登录
# login()
if __name__=='__main__':
readallusers()
while True:
vars="登录1,注册2,退出(任意内容):"
print(vars)
num=input('请输入对应的对号:')
if num=='1':
login()
elif num=='2':
register()
else:
print("欢迎下次再来...")
break
这个案例是照着他人的写的,忘记了他人的链接是啥了【挠头
以后再次看到了就标记上