实现了之前文章里面自己知道不完善的部分,舍弃了麻烦的blocklist.txt文件,把登入函数重新写了一遍,中途遇到很多问题
花了不少时间研究字符串的改写,虽然是很简单的事情,但是还是做了很久
用了一种比较蠢的方法,考虑到文档中最后一行不一定换行符,每次增删的时候都要对换行符进行操作,不过暂时想不到更好的办法
'''登陆系统
要求:
1,可以选择创建新的用户,可以检测出用户名是否已存在
2,可以登陆原有的用户
3,输入密码错误三次后用户则被锁定'''
flag=True #循环控制符
def createuser():
f=open('userlist.txt','r')#打开已存在用户的文件,此处默认已有该文件,用户信息格式为用户名*密码*密码输入错误次数
name=f.readlines()
f.close()
while flag:
username=input('username:')
flag2=False#用户名已存在的标记符
for line in name:
if(username==line.split('*')[0]):
flag2=True
print("用户名已存在,请重新输入")
if flag2!=True:
password=input('password:')
f=open('userlist.txt','a')#创建新的用户
f.write('\n'+username)
f.write('*'+password+'*0')#创建新用户默认密码输入错误次数为0
f.close()
print("用户创建完毕")
break
main()
def login():#登入函数,输入密码错误三次则锁定用户
f1=open('userlist.txt','r+')
name=f1.readlines()
f1.close()
while flag:
count=0#用户名列表计数,每次输入完毕就清零
username=input('username:')
for line in name:
count+=1
if line.split('*')[0]==username:
if int(line.split('*')[2][0])==3:
print('该用户已经被锁定,将返回主菜单')
main()
else:
password=input('password:')
if line.split('*')[1]==password:
print('登陆成功!')
main()#登入成功,返回主菜单
else:
print('用户名或密码错误,请重试')
if(line.split('*')[2][0])=='0':
name[count-1]=name[count-1].strip()[:-1]#删除字符串最后一个字符
name[count-1]+='1\n'#修改密码错误次数
if(line.split('*')[2][0])=='1':
name[count-1]=name[count-1].strip()[:-1]#删除字符串最后一个字符
name[count-1]+='2\n'#修改密码错误次数
if(line.split('*')[2][0])=='2':
name[count-1]=name[count-1].strip()[:-1]#删除字符串最后一个字符
name[count-1]+='3\n'#修改密码错误次数
f2=open('userlist.txt','r+')
f2.writelines(name)#每次输错密码就复写文件,记录详细数据
f2.close()
break
info='''
------请输入相关数字-----
1.创建新的用户
2.登陆已有用户
3.退出程序
'''
def main():
print(info)
while flag:
i=input()
if i=='1':
createuser()
break
elif i=='2':
login()
break
elif i=='3':
exit()
else:
print("请输入正确的数字.")
main()#程序入口