• day1作业一:编写登陆接口


        作业一:编写登陆接口 

        1.输入用户名和密码

        2.认证成功后显示欢迎信息

        3.输错三次后锁定

    Readme:

        (1)提示用户输入用户名;

        (2)用户名验证,验证是否已经锁定;

        (3)是否锁定:已锁定告诉用户,输入的用户名已经锁定,找管理员联系;未锁定就验证是否注册;

      (4)是否注册:未注册就提示用户,这个用户名还没有注册,需要注册;注册就让用户输入密码;

      (5)输入密码:输入正确就欢迎用户,输入不正常就三次机会,提示用户输入,三次之后将锁定

      (6)锁定用户从登录用户文件中移除并添加到锁定用户文件。

    流程图如下:

    def islocked(username):
        #验证用户是否锁定,如果锁定,就打印锁定,否则执行登录模块
        with open("lock_user","r") as f:   #打开文件,进行验证
            users = []                     #定义一个空的列表,用于存储用户名
            lines = f.readlines()          #由于是读取的文件信息,需要把用户信息放到一个列表中容易操作
            for line in lines:
                users.append(line.strip().split(":")[0])       #生成一个包含所有用户名的列表
            if username in users:
                #验证用户输入的用户名是否在系统用户列表中,存在则提示用户已经锁定了
                print("你输入的用户名%s已经被锁定,请联系管理员" %username)
                exit()
    
            else:
                #不存在则验证是否注册
                isregister(username)
    
    def isregister(username):
        #验证用户是否注册
        with open("user_list",'r') as f_object:
            #打开文件,生成用户列表
            register_users =[]
            user_lines = f_object.readlines()
            for user_line in user_lines:
                register_users.append(user_line.strip().split(":")[0])
            if username in register_users:
                #验证用户是否注册,注册了就跳过
                pass
            else:
                #没有注册提示用户这个用户名没有注册,并退出循环
                print("Sorry,%s还没有注册,请注册之后登录" %username)
                exit()
    
    def userpassword():
        #让用户输入用户密码,并返回给调用函数
        password = input("Please input your password:")
        return password
    
    def login(username):
        #用户登录模块
        i = 0
        islocked(username)
        #验证用户是否锁定是否注册
        with open("user_list","r") as f1:
            dic = {}      #定义空字典,生成用户名,密码配对字典
            user_lines = f1.readlines()
            for user_line in user_lines:
                #生成用户名-密码字典
                (user,user_password) = user_line.strip().split(":")
                dic[user] = user_password
            while i < 3:
                #用户有三次机会输入密码验证
                password = userpassword()
                #调用函数让用户输入密码
                if dic[username] == password:
                    #用户输入的密码与系统存储的密码比较,如果一致登录成功就退出登录页面
                    print("Hello %s,welcome to back." %username)
                    break
                else:
                    #不成功提示用户有三次机会,如果三次都不成功,将锁定用户名
                    if i != 2:
                        print("对不起,你输入的密码不对,你还有%s次机会" %(2-i))
                        i += 1
                    else:
                        print("对不起,你输入的次数过多,你的用户名已经被锁定,请联系管理员")
                        add_locked_user(username)
                        #输入次数过多,把用户名从文件user_list中删除,同时添加到锁定文件lock_user
                        break
    
    def add_locked_user(username):
        #锁定输入密码次数过多用户名
        with open("user_list","r") as file:
            #打开文件,并查找要锁定用户名的位置
            lines = file.readlines()      #逐行读取文件生成一个列表
            users = []                    #定义一个空的列表,借助用户名列表找到用户名位置
            for line in lines:
                users.append(line.strip().split(":")[0])
            num = users.index(username)          #找到锁定问户名在列表中索引
        with open("lock_user","a") as f:
            #将待锁定的用户名添加到锁定文件
            f.write("%s
    " %lines[num])
        with open("user_list","w") as f_object:
            #以只读模式打开文件
            del lines[num]          #删除锁定用户的用户名
            f_object.writelines(lines)       #把剩下用户逐行读取到文件中
    
    login(username=input("Please input your username:"))

        上面代码运行需要创建两个文件在同级目录,lock_user和user_list,在里面使用了列表、字典等功能,list列表、字典功能最常用,要经常尝试使用空字典、空列表的功能,writelines(),readlines()。上面代码可以实现判断用户输入的用户名是否在锁定列表中,是否在登录的列表中,并且能够实现登录三次锁定的功能。

  • 相关阅读:
    AJAX 大全
    has value '1.8', but '1.7' is required
    VS2010官方下载地址
    win10桌面显示我的电脑
    使用 CAST
    for循环+canvas实现黑客帝国矩形阵
    C# Lambda
    win7系统部分便笺的元数据已被损坏怎么恢复
    SQL查询所有表,所有列
    truncate和delete之间有什么区别
  • 原文地址:https://www.cnblogs.com/gengcx/p/6816382.html
Copyright © 2020-2023  润新知