要求
1.输入用户名密码
2.认证成功后显示欢迎信息
3.输错三次后锁定
思路
没有数据库,这里使用本地文件,一共需要两个文件:
黑名单的文件:黑名单里检测,不让登录
用户信息文件:将已有的用户信息存放在此文件
1.首先检测黑名单是否有该用户,如果有就强制退出程序
这里检测的方式一共有两种方式:
方式一:
1 username = input('请输入用户名:') 2 with open(locked_file, 'r') as lock_f: # 先检测黑名单是否有用户名 3 lines = [] 4 for line in lock_f.readlines(): 5 lines.append(line.strip()) 6 if username in lines: 7 sys.exit('用户 %s 已经被锁定!' % username)
方式二:
1 username = input('请输入用户名:') 2 with open(locked_file, 'r') as lock_f: # 先检测黑名单是否有用户名 3 lines = [] 4 for line in lock_f.readlines(): 5 if len(line)==0: 6 continue 7 if username == line.strip(): 8 sys.exit('用户 %s 已经被锁定!' % username)
2.如果检测黑名单里面没有该用户,就输入密码,然后就去用户信息文件中匹配用户名和密码
1 with open(account_file,'r') as account_f: # 在用户信息文件中检测密码 2 flag = False 3 for line in account_f.readlines(): 4 user,pawd = line.strip().split() 5 if username == user and password == pawd: 6 print("success!") 7 print("欢迎 %s 来到后台登录系统" %username) 8 flag=True 9 break # 退出当前for循环
3.在用户信息文件中匹配成功则成功进入系统,如果没有匹配成功就继续输入
4.继续输入的过程中对输入次数计数,当次数达到限制还没有成功匹配就将该用户加入黑名单然后退出程序。当次数没有达到限定次数然后匹配成功,就成功进入系统。
将用户名写入黑名单:
1 def deny_account(username): 2 print("您的用户已被锁定!") 3 with open(locked_file,'a') as deny_f: 4 deny_f.write(' '+username)
完整代码
1 import sys 2 3 account_file = 'D:match.txt' 4 locked_file = 'D:locked.txt' 5 6 # 当用户输入错误操作三次将用户的用户名添加进黑名单文件 7 def deny_account(username): 8 print("您的用户已被锁定!") 9 with open(locked_file,'a') as deny_f: 10 deny_f.write(' '+username) 11 # 主文件 12 def main(): 13 retry_count = 0 # 计数器 14 retry_limit = 3 # 次数限制 15 while retry_count<retry_limit: # 循环输入 16 username = input('请输入用户名:') 17 with open(locked_file,'r') as lock_f: # 先检测黑名单是否有用户名 18 #方式一 19 # for line in lock_f.readlines(): 20 # if len(line)==0: 21 # continue 22 # if username == line.strip(): 23 # sys.exit(' 33[32:lm用户 %s 已经被锁定! 33[0m' % username) 24 #方式二 25 lines = [] 26 for line in lock_f.readlines(): 27 lines.append(line.strip()) 28 if username in lines: 29 sys.exit('用户 %s 已经被锁定!' % username) 30 if len(username)==0: 31 print('用户名不能为空,请重新输入') 32 continue 33 34 password = input('请输入密码:') 35 with open(account_file,'r') as account_f: # 在用户信息文件中检测密码 36 flag = False 37 for line in account_f.readlines(): 38 user,pawd = line.strip().split() 39 if username == user and password == pawd: 40 print("success!") 41 print("欢迎 %s 来到后台登录系统" %username) 42 flag=True 43 break # 退出当前for循环 44 if flag == False: 45 if retry_count<2: 46 print("您的用户名或密码有误,请重新输入!") 47 retry_count +=1 48 else: 49 print("欢迎进入后台管理系统") 50 break # 跳出while循环 51 else: 52 deny_account(username) 53 if __name__ == '__main__': # Python主文件的判断,入口处 54 main()
注意:
这里目前有一个bug,这里的计数是对输入用户名的次数进行计数,而不是根据某个具体的用户名进行计数,因此这里还需要改进。各位博友有好主意的可以顶起来哦!