一、功能

    1、通过Python的交互界面来模拟简单的用户注册和登录,并把注册信息文件化,使用json模式存入到csv文件中.

     2、用户名错误3次,账户冻结

     3、用户名查重

     4、注册时密码,手机号正则匹配

     5、修改密码和修改手机号

     6、用户信息.csv文件的读取与写入

二、python代码

# -*- coding: utf-8 -*-
# @Time : 2022/12/21 11:00
# @Author : Lenovo
# @Email : qimeiyu@woniuxy.com
# @File : regeist2.py
# @Project : demo
# @脚本说明 :登录注册信息文件化
import csv as cs
import  re
'''封装'''
def make_dict(**dic):
    return dic
'''读取文件里的账号并存储到userlis里'''
def read_file():
    with open('1.csv', 'r') as fp:
        global userlis
        userlis = []
        res = cs.DictReader(fp)  # 读出来的数据会组成一个字典,但是有逗号多间隔符
        for i in res:
            userlis.append(i)
    return userlis
'''覆盖写入'''
def write_new_userlis(userlis):
    with open('1.csv','w',newline='') as fp:
        w=cs.writer(fp)
        key = userlis[0].keys()         #取出第一行的的键用作表头,列表
        w.writerow(key)                 #把表头写入
        for i in userlis:
            value = i.values()           #取出每一行的值重新写入,列表
            w.writerow(value)
'''密码校验——修改密码'''
def chack_pwd(usname,pwd):
    for i in range(0, len(userlis)):
        if (usname == userlis[i]['usname'] and pwd == userlis[i]['pwd']):
                return 1
    return 0
'''用户名查重'''
def chack_user_exit(uname):
    for i in userlis:
        if (uname == i['usname']):
            print('用户已经存在!')
            return 0
    return 1
'''用户名匹配'''
def input_chack_uname(usname):
    rule='^[^0-9][0-9A-z].{5,12}'
    result = re.match(rule, usname)
    if (result and chack_user_exit(usname)):  #匹配正则和查重
        return usname
    else:
        print('您的账号不符合要求。')
        return 0
'''密码匹配'''
def input_chack_pwd(pwd):
    rule='^(?=.*\d)(?=.*[A-Z])(?=.*[a-z]).{6,15}$'
    result = re.match(rule, pwd)
    if (result):
        return pwd
    else:
        print('您的密码不符合要求。')
        return 0
'''手机号匹配'''
def input_chack_phone(phone):
    rule='^1.txt[3-9]\d{9}$'
    result=re.match(rule,phone)
    if(result):
        return phone
    else:
        print('您的手机号不符合要求')
        return 0
'''功能:注册'''
def file_add_user():
    with open('1.csv','a',newline='') as fp:
        w=cs.writer(fp)
        usname=0
        count=0
        while usname==0:    #用户名输入
            usname = input('请输入账号:')
            usname=input_chack_uname(usname)  #用户名输入和检测函数
        pwd=0
        while pwd==0:   #密码输入
            pwd = input("请输入密码:")
            pwd=input_chack_pwd(pwd)  #密码输入和检测函数
        phone=0
        while phone==0:   #电话输入
            phone = input("请输入手机号码:")
            phone=input_chack_phone(phone)   #电话输入和检测函数
        w.writerow([usname,pwd,phone])  # 把注册信息追加到文件中
'''功能:登录用户名校验'''
def login_chack_usname():
    usname = input("请输入用户名:")
    for i in userlis:
        if(usname==i['usname'] ):
            return usname
    print('用户名不存在')
'''功能:密码校验,错误输入三次,禁封用户'''
def login_chack_pwd(usname):
    count=0
    while count<=3:
        pwd = input("请输入密码")
        for i in userlis:
            if(pwd==i['pwd'] ):
                return 1
        print('密码错误!')
        count+=1
    '''三次输错密码,删除userlis列表里的usname'''
    print("密码错误超过3三次,封禁此账号!")
    for i in range(0,len(userlis)):
        if(userlis[i]['usname']==usname):
            userlis.pop(i)                      #遍历找出对应目标删除,之后要break不然会报错
            break
    write_new_userlis(userlis)
    return 0
'''功能:修改密码'''
def chacnge_pwd(usname):
    count=0
    while count<=3:
        pwd=input("请输入旧密码:")
        if(chack_pwd(usname,pwd)):
            pwd1=input("请输入新密码:")
            pwd2=input("请再次确认密码:")
            if(pwd1==pwd2 and (input_chack_pwd(pwd2)!=0)):
                for i in range(0,len(userlis)):
                    if (usname == userlis[i]['usname']):
                        userlis[i]['pwd']=pwd2
                        print('密码修改成功!')
                        write_new_userlis(userlis)
                        break
                break
            else:
                print("密码输入有误!")
        else:
            print("旧密码出入错误")          #修改密码时,旧密码输入错误3次退出循环
            count+=1
'''功能:修改电话'''
def change_phone(usname):
    cout=0
    while cout<=3:
        phone=input("请输入您的新电话号码:")
        if(input_chack_phone(phone)):
            for i in range(0, len(userlis)):
                if (usname == userlis[i]['usname']):
                    userlis[i]['phone'] = phone
                    print('电话号码修改成功!')
                    write_new_userlis(userlis)
                    break
        else:
            print("手机号格式不正确!")
    print("输入错误超过3次,自动退出!")

if __name__ == '__main__':
    read_file() #程序开起第一步,把已有的用户信息读出来,主要是全局变量userlis
    print('|------------------------主菜单-------------------------|')
    print()
    print('---------------------登录-----注册---------------------|')
    print()
    print('|--------------------------------------------------------|')
    out=0
    while out==0:
        begin = input("1登录,2注册,3退出:")
        if(begin=="1.txt"):
            usname=0
            cout=0
            while usname==0:
                usname=login_chack_usname()    #用户名登录和验证
                cout+=1
                if(cout>3):
                    print('用户名错误超过三次!')
                    break
            if(login_chack_pwd(usname)):            #密码登录和验证以及3此失效删除用户
                while out==0:
                    print('|------------------------用户操作菜单--------------------------|')
                    print('|---------------------欢迎',usname,'登录-----------------------|')
                    print('|-----------------------------------------------------------------|')
                    begin2 = input("1修改密码,2修改电话,3退出:")
                    if(begin2=="1.txt"):
                        chacnge_pwd(usname)
                    elif (begin2 == "2"):
                        change_phone(usname)
                    elif (begin2 == "3"):
                        break
        elif(begin=="2"):
            file_add_user()
        elif(begin=="3"):
            break
        else:
            print("请输入对应的指令!")