需求:
- 输入用户名,密码
- 认证成功显示欢迎信息
- 输入错误三次后锁定用户
Readme:
1.ID.txt是存放用户名、密码的文件,和linux一样使用冒号隔开,相比空格、Tab键间隔,冒号更好处理
sam:123
jack:456
tom:789
2.LockID.txt是存放被锁定用户名的文档,默认为空.
3.用户登录时首先会判断是不是在锁定文件中,如是则提示已锁定并退出程式
4.接下来判断用户ID是否合法,合法用户密码错误3次会被锁定;非法用户ID错误3次直接退出,不会记录
流程图:
代码:
#-*- coding:utf-8 -*- #Version:python3.5 #Programme Summary:密码错误3次,对应用户名将被锁定;用户名错误3次,程序将会登出。 import sys,getpass #文件路径使用变量,方便变更 LockID = 'I:python_testLockID.txt' ID = 'I:python_testID.txt' #定义锁定用户的函数 def Deny_ID(username): with open(LockID,'a') as Deny_f: Deny_f.write(' ' + username) sys.exit("密码错误3次,帐号被锁定!") ID_list=[] count = 0 #用列表获取用户ID,方便下面判断用户是否合法 with open(ID, 'r') as ID_file: for lines in ID_file: (usr, pawd) = lines.strip().split(':') ID_list.append(usr) #主程序3次循环 while count < 3: count += 1 username = input('用户名:') #用with方法读取文档,可防止后面忘记关闭文件 with open(LockID,'r') as Lock_f: #for循环判断用户是否在锁定表中,如在则提示被锁定,程序退出 for line in Lock_f: if username == line.strip(' '): sys.exit("此用户已被锁定,请找管理员.") #判断用户名是否合法 if username in ID_list: p = 0 #如用户名合法,接着判断密码是否正确 while p < 3: p +=1 password = getpass.getpass("密码:") with open(ID,'r') as ID_f: for lines in ID_f: #用冒号分离并获取用户ID和密码 (user,passwd) = lines.strip().split(':') #判断用户ID和密码是否同时成立 if user == username and passwd == password: sys.exit("欢迎用户%s登录!"%username) else: if p != 3: print("密码错误第%d次,3次将被锁定" % p) else: #调用锁定用户函数 Deny_ID(username) #不合法用户ID else: if count != 3: print("用户名错误第%d次."%count) else: #错误用户ID不会写入锁定表 sys.exit("用户名错误3次,程序登出!")