用户登陆程序,密码三次错误自动锁定用户名。

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)
回头看

 

以上是关于用户登陆程序,密码三次错误自动锁定用户名。的主要内容,如果未能解决你的问题,请参考以下文章

Python作业模拟登陆(第一周)

python 3.5 用户登录验证和输入三次密码锁定用户

python作业之用户登录

Linux Centos7设置输入密码三次错误锁定账号

小实战01

python作业:模拟登陆(第一周)