作业:登录系统注册系统黑名单系统组合

一、实现用户注册功能

思路:

        用户输入用户名、密码

        将用户输入的内容按照固定的格式,比如:egon:123,存入文件

        可以往一个文件中重复注册新的用户名和密码

附加:

        1. 对输入的用户名进行合法性监测,不能以数字开头,且如果输入的用户名已存在于文件中则要求用户重新输入

        2. 对输入的密码进行合法性监测,密码的长度至少6位,并且不能包含特殊字符*&$

二、实现用户验证功能:

思路:

        用户输入账号密码,从文件中读出账号密码,与用户输入的进行比对

附加:

        新建黑名单文件,同一个账号名输错三次则将用户名写入黑名单文件中,如果用户输入的用户名存在于黑名单中则直接退出


spe_char = ['*', '&', '$']     # 定义特殊字符,方便后面与密码的对比
tag = True
dic = {}              # 定义空字典,用来记录用户错误次数,三次加入黑名单

while True:            # 判断用户是log in还是sign in
    choice = input('Log in or Sign in >>:').strip().lower()
    if choice == 'log in' or choice == 'sign in':
        break
    else:
        print('Incorrect input, please re-enter.')

with open('account.txt', mode='a+', encoding='utf-8') as f:
    while tag:
        f.seek(0)        # 追加模式,应该将光标移到开头,方便遍历文件,与用户输入用户名作对比
        if choice == 'log in':
            inp_name = input('Please enter the user name >>:').strip()
            inp_pwd = input('Please enter your password>>:').strip()
            with open('blacklist.txt', mode='r', encoding='utf-8') as f_lock:  # 先判断用户输入用户名是否在黑名单中
                if inp_name in f_lock:
                    print('Account has been locked.')
                    tag = False
                    break
            for line in f:         # 对比用户输入用户名密码与数据库中是否一致
                msg = line.strip('\n').split('|')
                if inp_name == msg[0] and inp_pwd == msg[1]:
                    print('Login successful.')
                    tag = False
                    break
                else:
                    if inp_name == msg[0]:
                        if inp_name in dic:
                            dic[inp_name] += 1
                        else:
                            dic[inp_name] = 1
                        with open('blacklist.txt', mode='a', encoding='utf-8') as f_lock:     # 如果错误次数达到三次,则将用户输入用户名加入黑名单
                            if dic[inp_name] == 3:
                                f_lock.write(inp_name)
            else:
                print('Username or password is incorrect, please re-enter. \n')
        else:
            sgn_name = input('Please enter the user name >>:').strip()
            for line in f:
                msg = line.strip('\n').split('|')
                if sgn_name[0].isdigit():    # 合法性监测:用户名是否以数字开头
                    print('Incorrect input, please re-enter.')
                    break
                if sgn_name == msg[0]:      # 合法性监测:用户名是否已经在数据库中
                    print('Username already exists, please re-enter.')
                    break
            else:
                sgn_pwd = input('Please enter your password>>:').strip()
                for s in sgn_pwd:     
                    if s in spe_char or len(sgn_pwd) < 6:   # 合法性监测:判断密码中是否有特殊字符或密码是否小于6位
                        print('Incorrect input, please re-enter.')
                        break
                else:
                    print('Registration success')
                    info = ('%s|%s\n'%(sgn_name,sgn_pwd))  
                    f.write(info)    # 将用户注册信息写入账户文件中
                    tag = False

 

你可能感兴趣的:(python,python作业)