day01 作业 用户认证

readme:

  

一、文件列表
    ——userAuthenticate.py
        ——usernamePassword.txt
        ——lockUser.txt
    ——level3Menu.py

二、主要完成的功能:
    1、登陆接口:
        a、功能详细情况
            1)输入用户名密码
            2)认证成功后显示欢迎信息
            3)输错三次锁定
            其中:
                1)已经注册的用户名和密码保存在usernamePassword.txt文件里面,格式为username,password
                2)输入三次错误后,锁定用户并退出程序
                2)只锁定已经注册了的用户名
                3)锁定的用户名放在lockUser.txt里面,格式为username
                4)当用户已经被锁定,当用户输入完成后显示 "该用户已经被锁定"
        b、文件列表
              ——userAuthenticate.py               主体功能文件
                ——usernamePassword.txt          保存已经注册的用户名和密码
                ——lockUser.txt                  保存锁定用户的用户名
        c、主体流程:
            1、读取usernamePassword.txt ,lockUser.txt 两个文件数据到内存
            2、提示用户输入用户名和密码
            3、判断用户输入的用户名是否已经被锁定
                    3.1、如果用户名已经锁定,重新让用户输入,重复1,2,3的步骤,直到三次,如果三次输入的用户名均被锁定,提示"你玩完了",并退出程序
                    3.2、如果其中有一次输入的用户名没有被锁定,则判断用户名和密码是否已经注册,如果注册,显示欢迎页面 "huan yin",挂起进程

二、文件完成功能
    1、userAuthenticate.py
        a、作用:登陆接口
            1)输入用户名密码
            2)认证成功后显示欢迎信息
            3)输错三次锁定
            其中:
                1)已经注册的用户名和密码保存在usernamePassword.txt文件里面,格式为username,password
                2)输入三次错误后,锁定用户并退出程序
                2)只锁定已经注册了的用户名
                3)锁定的用户名放在lockUser.txt里面,格式为username
                4)当用户已经被锁定,当用户输入完成后显示 "该用户已经被锁定"
userAuthenticate.py
  
'''
    作用:登陆接口
        输入用户名密码
        认证成功后显示欢迎信息
        输错三次锁定
'''


def StreamToDict(Stream):
    '''
    将流中的数据保存到字典中并返回字典
    :param Stream: 包含数据的流
    :return:包含数据的字典
    '''
    dataDict = {}
    for lineData in Stream:
        dataDict[lineData.split(',')[0].strip()] = lineData.split(',')[0].strip()
    return dataDict

def StreamToList(Stream):
    '''
    将流中的数据保存到列表中并返回列表
    :param Stream: 包含数据的流
    :return:包含数据的列表
    '''
    dataList = []
    for lineData in Stream:
        dataList.append(lineData.strip())
    return dataList

def listToFile(list,fileName):
    '''
    以追加的方式将list写到文件中,每一项占一行
    :param list:要写入文件的list
    :param fileName:要写入的文件
    :return:none
    '''
    try:
        fileStream=open(fileName,'a',encoding='utf-8')                          #以追加的形式往文件添加内容,当文件不存在,这句话会抛出异常,
    except:
        print("机器等待维修")
    else:
        for listItem in list:
            fileStream.write('\n'+listItem)
    finally:
        try:
            fileStream.close()  # 当文件不存在,这句话会抛出异常
        except:
            print("机器等待维修")
    pass

def test():
    '''
    test Coding
    :return:none
    '''
    try:
        usernamePasswordFile=open('usernamePassword.txt','r',encoding='utf-8')         #读取已经注册的用户名和密码,当文件不存在,这句话会抛出异常
        lockUserFile=open('lockUser.txt','r',encoding='utf-8')                          #读取已经锁定的用户名,当文件不存在,这句话会抛出异常,
    except:
        #print("机器等待维修")                                     #给用户以提示
        raise
    else:
        # 将用户名和密码保存到usernamePasswordDisct字典里面
        usernamePasswordDict=StreamToDict(usernamePasswordFile)     #usernamePasswordDict中保存了已经注册的用户名和密码,格式是{'username': 'password'}
        lockUserList=StreamToList(lockUserFile)                     #lockUserList中保存了已经注册的用户名
        lockUserListLength = len(lockUserList)                      #记录已经锁定用户的个数,再次锁定只需锁定新加的
    finally:
        try:
            usernamePasswordFile.close()  # 当文件不存在,这句话会抛出异常
        except:
            #print("机器等待维修")         #给用户以提示
            raise
    inputNumber=3   #输入密码次数
    while inputNumber>0:
        username=input("请输入用户名:")
        password=input("请输入密码:")
        if username not in lockUserList and username in usernamePasswordDict.keys() and usernamePasswordDict[username]==password:        #用户没有被锁定,用户名已经注册,密码正确
            print("huan yin !!")                    #显示欢迎页面
            while True:                             #程序停在这里
                pass
        else:
            inputNumber-=1
            if inputNumber>0:
                print('用户名或密码错误,请在输入一次,你还有%d次机会\n'%inputNumber)
            else:
                print("你玩完了\n")             #给用户以提示

    #用户名或密码输入错误,首先看用户名是否已经注册,如果是并且用户不在已经锁定的用户中(避免重复锁定),则锁定用户,否则什么都不做
    if username in usernamePasswordDict.keys() and username not in lockUserList:
        lockUserList.append(username)
    listToFile(lockUserList[lockUserListLength:],'lockUser.txt')            #更新锁定文件的内容,锁定只需锁定新加的
    exit(1)

print(__name__)

if __name__ == '__main__':
    test()

lockUser.txt:

dawa1

usernamePassword.txt
dawa1,dawa1
dawa2,dawa2
dawa3,dawa3
posted @ 2017-10-24 11:26  XiaoBBai  阅读(129)  评论(0编辑  收藏  举报