登录接口和多级菜单
1、登录接口
实现功能:
1、用户注册
2、用户登录
3、用户名是否存在
4、密码错误三次锁定,并更新用户锁定状态
5、用户锁定状态匹配
流程图:
说明:
涉及到一个作为用户数据存储的文件passwd,数据存储格式为
用户名:密码:是否锁定(1为锁定,0为未锁定)
zhy:123456:0
alex:234567:0
xiaoming:45678:1
代码:
#!/usr/bin/env python3
#coding:utf-8
user_name = input("请输入用户名:")
n = 0
line = " "
while 1:
with open('passwd','r') as passwd_file:
for line in passwd_file:
passwd_line = line.split(':') #将每一行都转换成列表 ['用户名','密码','状态']
if user_name != passwd_line[0]: #当用户不匹配时标记为n=0,当用户名匹配成功则标记n=1并结束循环
n = 0
else:
n = 1
break
if n == 0: #判断n的值,n=0时则用户不存在,n=1时用户存在结束while循环,继续向下执行
print("您输入的用户名[%s]不存在!" %user_name)
user_name = input("请重新输入用户名:")
else:
break
with open('passwd', 'r+') as passwd_file: #以读写的模式打开文件,后面会涉及到写文件
for line in passwd_file:
passwd_line = line.split(':')
if user_name == passwd_line[0] and passwd_line[2].strip('\n') == "1": #判断当前用户的状态是否锁定,1为锁定,0为未锁定
print("您的用户名[%s]已经被锁定" %user_name)
break
else:
count = 1
password = input('请输入密码:')
while count < 4: #当输入次数小于4时,对密码正确性进行匹配,在输入三次错误后count会等于4,执行else语句锁定用户
passwd_file.seek(0) #重新定位用户密码文件开始位置
for line in passwd_file:
passwd_line = line.split(':')
if user_name == passwd_line[0] and passwd_line[1] == password : #当前用户的密码进行匹配,匹配则显示登录成功 ,不匹配执行else语句
print('欢迎您%s登陆成功!' % user_name)
exit()
else:
print('您输入的密码错误,超过3次您的账户将会被锁定,当前错误次数%s' % count)
if count < 3 : #最初已经提示过输入一次密码,所以只需再提供最多2次输入
password = input('请重新输入密码:')
count += 1 #计数器+1
else:
print('您输入密码错误超过三次,该账户%s已锁定!' %user_name)
passwd_file.seek(0) #重新定位用户密码文件开始位置
for line in passwd_file:
passwd_line = line.split(':')
if user_name == passwd_line[0]:
break
lock_line = line #找出需要锁定用户所在的行
lock_line_1 = lock_line.replace('0','1') #将用户的状态由未锁定置为锁定
passwd_file.seek(0)
old_line = passwd_file.read() #读取所有文件内容
new_line = old_line.replace(lock_line,lock_line_1) #更新需要锁定的用户行
passwd_file.seek(0)
passwd_file.truncate()
passwd_file.write(new_line) #重新写入文件
exit()View Code