zoukankan      html  css  js  c++  java
  • 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()。上面代码可以实现判断用户输入的用户名是否在锁定列表中,是否在登录的列表中,并且能够实现登录三次锁定的功能。

  • 相关阅读:
    27. Remove Element
    26. Remove Duplicates from Sorted Array
    643. Maximum Average Subarray I
    674. Longest Continuous Increasing Subsequence
    1. Two Sum
    217. Contains Duplicate
    448. Find All Numbers Disappeared in an Array
    566. Reshape the Matrix
    628. Maximum Product of Three Numbers
    UVa 1349 Optimal Bus Route Design (最佳完美匹配)
  • 原文地址:https://www.cnblogs.com/gengcx/p/6816382.html
Copyright © 2011-2022 走看看