用户登陆程序,密码三次错误自动锁定用户名。
Posted 777
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用户登陆程序,密码三次错误自动锁定用户名。相关的知识,希望对你有一定的参考价值。
1.正常用户存储文件:users
2.锁定用户存储文件:lock_name
3.执行程序:
while True: #while循环。 name=input("please input your name:").strip() #引导用户输入用户名。 psw=input("please input your psw:").strip() ##引导用户输入密码。 dict = {} #建立一个空字典 list = [] #建立一个正常用户名待导入的空列表。 list2=[] #建立一个锁定用户待导入的空列表。 flag=0 #创建一个标志位,默认关闭。 count = 0 #计时器。 with open("users",encoding="utf8") as fire1,open("lock_name", encoding="utf8") as fire:#打开正常用户存储文件和锁定用户存储文件 for i in fire: #遍历锁定用户文件。 list2.append(i.strip()) #将锁定文件内用户名导入列表list2。 for p in fire1: #遍历正常用户文件。 name_a, psw_a = p.strip().split("---") #按列表格式导出相对应的用户名跟密码。 list.append(p.strip().split("---")) #将导出的列表再嵌套倒列表list中。 for i in list: #遍历列表list dict[i[0]] = i[1] #将列表list转成字典。 for j in list2: #遍历锁定列表list2。 if name==j: print("对不起,您的用户名目前为锁定状态!") exit() #判断输入的用户名是否在list2,如果在就提示为锁定用户并且退出,否则跳到下层代码。 if name not in dict.keys(): print("用户名不存在!") continue #如果用户输入的用户名不在正常用户列表,提示用户并重新输入。 while count<3 and flag==0: #循环范围计时器小于3次,标志位为关闭。 for key,value in dict.items(): #遍历字典键值对。 if name==key and psw==value: #如果输入的用户名跟密码与键值对相对应。 print("".join(["欢迎",name,"用户!"])) #提示登陆成功。 flag=1 #同时标志位开关打开。 break #跳出本层循环。 if name==key and psw!=value: #如果用户名正确而密码不正确。 print("您的密码错误!") #提示密码不正确。 count+=1 #计时器+1。 if count==3: #当计时器等于3时。 with open("lock_name",mode="a+",encoding="utf8" ) as fire: #a+模式打开锁定文件。 fire.write("\\n") fire.write(name) #将超过三次错误的用户名追加方式写进文件。 print("您的用户名已锁定!") exit() #并且退出程序。 psw = input("please input your psw:").strip() #不超过三次提示继续输入密码。 print("欢迎您继续进行您想要的操作:") #登陆成功后执行当层程序代码。
l1=[]#建立一个接收正常用户信息的空列表。 l2=[]#建立一个接收锁定用户信息的空列表。 d1={}#建立一个接收用户密码错误次数的空字典。 flag=1#设置一个标志位 with open("users", encoding="utf8") as f1, open("lock_name", encoding="utf8")as f2: for i in f1:#遍历正常用户文件 l1.append(i.strip().split("---"))#以---为分割添加到列表l1中。 d2 = dict(l1)#将列表l1转成用户名与密码相对应的字典。 for k in f2: l2.append(k.strip())#遍历锁定用户文件添加到空列表l2中。 while flag==1:#登陆循环,标志位为1. name=input("请输入你的用户名:") psw=input("请输入你的密码:") name=name.strip()#去除空格 psw=psw.strip() if name not in d2:#判断用户名是否在正常用户字典中。 print("用户名不存在!") continue if name in l2:#判定用户是否在锁定用户列表中。 print("此用户名已锁!") else:#如果不再锁定用户列表中。 for n in d2:#遍历正常用户字典 if name==n and psw==d2[n]:#如果用户名与密码相对应登陆成功。 print("欢迎用户:%s"%(n)) flag=0#登陆成功将标志位改变成0,以便退出循环进行登陆成功后的操作。 elif name==n and psw!=d2[n]:#如果用户名正确而密码错误。 if n not in d1:#如果字典d1中没有这个用户名就将此用户名为key和1为value值添加到字典d1中。 d1[n]=1 print("密码错误!") break#退出for循环,重新进行登陆认证。 elif d1[n]<2:#如果字典d1中有这个用户名就将他的value值加1. d1[n]+=1 print("密码错误!") break#退出for循环,重新进行登陆认证。 elif d1[n]==2:#当这个用户名的value值为2时写入锁定文件。为什么是2不是3呢,因为value值是从0开始计数的! with open("lock_name",encoding="utf8",mode="a")as f3:#必须追加模式写入! f3.write(n+"\\n") print("密码错误三次锁定!") l2.append(name)#写完将用户名添加到锁定用户列表中以便程序刚开始的认证判断。 break#退出for循环,重新进行登陆认证。 if flag==0:#当标志位为0时(登陆成功时),进行以下程序操作。 print("请执行登陆后程序...")
1 db_dict = {} 2 count_dict = {} 3 with open("test", mode="r", encoding="utf8") as f: 4 for i in f: 5 ret = i.strip().split("|") 6 db_dict[ret[0]]=ret[1] 7 while 1: 8 name = input("name:".strip()) 9 pwd = input("pwd:".strip()) 10 if name not in db_dict: 11 print("用户名不存在!") 12 elif name in db_dict and pwd == db_dict[name]: 13 print("登录成功!") 14 break 15 elif name in count_dict and count_dict[name] == 2: 16 print("用户名已锁!请联系管理员") 17 exit() 18 else: 19 if pwd != db_dict[name] and name not in count_dict: 20 count_dict[name] = 1 21 print("密码错误%s次!超过3次锁定!"%count_dict[name]) 22 else: 23 count_dict[name] += 1 24 print("密码错误%s次!超过3次锁定!"%count_dict[name]) 25 print("欢迎%s用户"%name)
以上是关于用户登陆程序,密码三次错误自动锁定用户名。的主要内容,如果未能解决你的问题,请参考以下文章