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


    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("
    ")
                                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+"
    ")
                            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)
    回头看
  • 相关阅读:
    c++开发之对应Linux下的sem_t和lock
    嵌入式开发之davinci--- 8148/8168/8127 中的图像处理算法优化库vlib
    crc32 冗余加密校验
    快速安装 GitLab 并汉化
    oracle-6-密码文件
    oracle-5-的升级步骤
    Linux大文件已删除,但df查看已使用的空间并未减少解决
    cygwin 的不同文件类型显示不同的颜色
    PLSQL的安装
    网络流量监控工具----iftop
  • 原文地址:https://www.cnblogs.com/mrpengfei/p/6683668.html
Copyright © 2020-2023  润新知