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

 

posted @ 2016-05-15 20:00  WuYongQi。  阅读(192)  评论(0编辑  收藏  举报