要求
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 continue7 if username == line.strip():8 sys.exit('用户 %s 已经被锁定!' % username)
2.如果检测黑名单里面没有该用户,就输入密码,然后就去用户信息文件中匹配用户名和密码
1 with open(account_file,'r') as account_f: # 在用户信息文件中检测密码2 flag = False3 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=True9 break # 退出当前for循环
3.在用户信息文件中匹配成功则成功进入系统,如果没有匹配成功就继续输入
4.继续输入的过程中对输入次数计数,当次数达到限制还没有成功匹配就将该用户加入黑名单然后退出程序。当次数没有达到限定次数然后匹配成功,就成功进入系统。
将用户名写入黑名单:
1 def deny_account(username):2 print("您的用户已被锁定!")3 with open(locked_file,'a') as deny_f:4 deny_f.write('\n'+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('\n'+username)11 # 主文件12 def main():13 retry_count = 0 # 计数器14 retry_limit = 3 # 次数限制15 while retry_count
注意:
这里目前有一个bug,这里的计数是对输入用户名的次数进行计数,而不是根据某个具体的用户名进行计数,因此这里还需要改进。各位博友有好主意的可以顶起来哦!