python开发Day04(练习解答)
Day04:用户登录、注册、修改密码、删除用户练习解答:
def outer(func): ''' 这是一个装饰器,来做用户登录验证。 :param func: 函数 :return: 登录的失败与否 ''' def inter(username,password): a = open('db','r',encoding='utf-8')#获取数据 for i in a:#循环获取数据的每一行 i=i.strip()#去掉两边的空格或其他字符串 i=i.split('#')#以#号分割 if username == i[0] and password == i[1]: #判断用户输入的账号密码是用索引去对应的位置是否一样 print('登陆成功')#返回值 a=func(username,password) return a return '登录失败'#返回值 return inter @outer def Userdel(username,password): ''' 本函数用于删除用户 :param username: 用户账号 :param password: 用户密码 :return: 停止删除、删除成功 ''' cc=input('确认删除用户('+username+')\ty/n?')#自定义输入 if cc.lower() == 'n':#判断用户输入的是n return '停止删除用户' elif cc.lower() == 'y':#判断用户输入的是y with open('db','r+',encoding='utf-8') as a: #打开文件db ab=1 #标识,为什么了知道是不是第一个数据 txt=[] #定义一个空的列表为了先拿出来db里的账号密码进行保存 for i in a: #循环将账号密码存入到txt列表中 txt.append(i) a=open('db','w+',encoding='utf-8') #重新打开db文件打开前清空 for i in txt: #循环执行txt列表 i=i.strip() #将txt循环出来的内容去掉两边的空格和一些其他的符号 i=i.split('#') #将txt循环出来的内容用#号分割 if i[0] == username and i[1] == password:#判断本次循环的是不是用户的账号密码,如果是就跳过本次写入 continue if i == '': #判断本次循环中是空的,进行下一次循环 continue if ab == 1:#判断本次是不是第一次循环,如果是在写入的时候不加回车 a.write(i[0]+'#'+i[1]) ab+=1 else: a.write('\n'+i[0]+'#'+i[1]) #向打开文件内写入内容 a.close()#关闭文件 return '删除成功'#返回删除成功 else: print('输入有误!')#用户输入的不是y或者n提示用户输入有误,并且重新调用自身函数! Userdel(username,password) @outer def xiugai(username,password): ''' 本函数用于用户修改密码 :return: 修改成功 ''' a=input('请输入修改后的密码:') #自定义输入 b=input('请确认修改后的密码:') #自定义输入 if a != b : #判断用户两次输入的内容是不是一样的,如果不一样重新执行该函数、 xiugai(username,password) with open('db','r+',encoding='utf-8') as a: #打开文件db ab=1 #标识,为什么了知道是不是第一个数据 txt=[] #定义一个空的列表为了先拿出来db里的账号密码进行保存 for i in a: #循环将账号密码存入到txt列表中 txt.append(i) a=open('db','w+',encoding='utf-8') #重新打开db文件打开前清空 for i in txt: #循环执行txt列表 i=i.strip() #将txt循环出来的内容去掉两边的空格和一些其他的符号 i=i.split('#') #将txt循环出来的内容用#号分割 if i[0] == username and i[1] == password:#判断本次循环的是不是用户的账号密码,如果是就修改了其密码 i[1] = b if i == '': #判断本次循环中是空的,进行下一次循环 continue if ab == 1:#判断本次是不是第一次循环,如果是在写入的时候不加回车 a.write(i[0]+'#'+i[1]) ab+=1 else: a.write('\n'+i[0]+'#'+i[1]) #向打开文件内写入内容 a.close()#关闭文件 return '修改成功'#返回修改密码成功 def login(username,password): """ 本函数用于用户名密码的验证。 :param username:用户账户 :param password:用户密码 :return:用户名密码正确返回登陆成功,否则登录失败。 """ a = open('db','r',encoding='utf-8')#获取数据 for i in a:#循环获取数据的每一行 i=i.strip()#去掉两边的空格或其他字符串 i=i.split('#')#以#号分割 if username == i[0] and password == i[1]: #判断用户输入的账号密码是用索引去对应的位置是否一样 return '登陆成功'#返回值 return '登录失败'#返回值 def register(username,password): """ 这个函数用于注册用户账户。 :param username: 用户名 :param password: 用户密码 :return: 返回是否成功。 """ with open('db','r+',encoding='utf-8') as f:#去读现在又的账号密码 for i in f: #循环获取数据的每一行 i = i.strip()#去掉两边的空格或其他字符串 i = i.split('#')#以#号分割 if username == i[0] :#判断用户输入的账号是否存在 print('用户账户已存在!')#存在输出并重新执行 register(username,password)#重新执行函数 f.write('\n'+username+'#'+password)#成功创建用户,并一#号分割账号密码 return '注册成功' #返回注册成功 def main(): """ 登录和注册的主程序 :return: 没有 """ li = ['注册','登录','修改密码','删除用户'] for k,v in enumerate(li):#循环输出列表内容并加上序号 print(k,v) abc=input('请输入序号操作。')#自定义输入 if abc.isdigit():#判断是不是数字 abc=int(abc)#将用户输入的强制转换成数字类型 if abc == 0: name=input("请输入账号")#自定义输入 pwd=input("请输入密码")#自定义输入 print(register(username=name,password=pwd))#执行函数注册 elif abc == 1 : name=input("请输入账号")#自定义输入 pwd=input("请输入密码")#自定义输入 print(login(username=name,password=pwd))#执行函数登录 elif abc == 2: name=input("请输入账号")#自定义输入 pwd=input("请输入密码")#自定义输入 print(xiugai(username=name,password=pwd))#执行函数修改密码 elif abc == 3: name=input("请输入账号")#自定义输入 pwd=input("请输入密码")#自定义输入 print(Userdel(username=name,password=pwd))#执行函数修改密码 else: print('请正确输入')#自定义输出 else: print('请正确输入!')#自定义输出 main()#重新执行main函数 main() #执行函数main