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