用户登录注册升级版

发布时间 2023-11-26 16:10:54作者: Chimengmeng

【一】需求介绍

  • 用户可以注册,并将注册信息临时保存起来,登陆时可根据指定用户名或密码进行登陆

  • 设定好用户名和密码,用户通过输入指定的用户名和密码进行登陆

  • 最大尝试次数:用户最多尝试猜测3次

  • 最大尝试次数后:如3次后,问用户是否继续登陆

    • 如果回答Y或y,就再给3次机会,提示【还剩最后三次机会】
    • 3次都猜错的话登录结束
    • 如果回答N或n,登陆结束!
    • 如果格式输入错误,提示【输入格式错误,请重新输入:】
  • 如果猜对了,登陆结束!

【二】功能分析

  • 用户选择注册功能,存储用户名和密码
  • 设定猜测次数
  • 用户名和密码正确
    • 登陆成功
  • 用户名和密码错误
    • 输入 y 进行二次尝试
    • 输入 n 退出登陆,程序结束

【三】代码实现

【1】注册功能

# 【1】设定存储用户信息的 列表
user_data_list = []

# 【一】注册功能
while True:
    # 【2】用户输入用户名和密码
    username_register_input = input("请输入用户名 :>>>> ")
    password_register_input = input("请输入密码 :>>>> ")
    # 【3】拼接用户信息
    user_data = f"{username_register_input}|{password_register_input}"
    # 【4】存储到用户信息列表
    user_data_list.append(user_data)
    # 查看用户信息列表
    # print(user_data_list)
    age_input = input("请输入是否继续注册(Y/N) :>>>> ")
    if age_input == 'Y' or age_input == 'y':
        print(f"欢迎再次注册!")
    elif age_input == 'N' or age_input == 'n':
        print(f"感谢您的注册!下次再会!")
        break
    else:
        print(f"意料之外的错误哦!")
        break

【2】登陆功能

# 设定尝试次数(最多尝试3次)和初识尝试次数(1)和标志位
can_choice = 3
count = 1
tag_login = True
# 【1】获取用户信息字典 (假定已存储用户信息)
user_data_list = ['dream|521', 'hope|369']
# 【二】登录功能
while count <= can_choice and tag_login:
    # 每尝试一次,循环次数 + 1 (可尝试次数 - 1 )
    count += 1
    # 【2】用户输入用户名和密码
    username_input = input("请输入用户名 :>>>> ").strip()
    password_input = input("请输入密码 :>>>> ").strip()

    # 【3】遍历字典,拿到每一个元素
    for user_data in user_data_list:
        true_username, true_password = user_data.split('|')
        # 【7】校验输入的用户名和密码是否一致
        if true_username == username_input and password_input == true_password:
            print(f"用户 {username_input} :>>>> 登陆成功!")
            # 登陆成功后程序结束 -- 标志位重置为 False
            tag_login = False
            break
    else:
        print(f"用户 {username_input} :>>>> 用户名或密码错误!")
        print(f"还剩 :>>>> {can_choice + 1 - count} 次机会")
    # 【8】增加重试机制 : 输入 Y 将尝试次数重置为1,否则直接退出
    if count == can_choice + 1:
        age_input = input("请输入是否继续尝试(Y/N) :>>>> ")
        if age_input == 'Y' or age_input == 'y':
            print(f"欢迎再次尝试!祝您成功!")
            count = 1
        elif age_input == 'N' or age_input == 'n':
            print(f"感谢您的尝试!下次再会!")
            break
        else:
            print(f"意料之外的错误哦!")
            break

【3】查看用户信息功能

# 【1】获取用户信息字典 (假定已存储用户信息)
user_data_list = ['dream|521', 'hope|369']
print(user_data_list)

【4】功能整合

# 设定功能字典
func_list = '''
    --- 请输入序号选择功能 ---
        1.注册功能
        2.登录功能
        3.查看全部信息
'''
# 设定尝试次数(最多尝试3次)和初识尝试次数(1)和标志位
can_choice = 3
count = 1
# 【1】用户信息列表
user_data_list = []
while True:
    print(func_list)
    function_id = input("请输入功能ID(n退出) :>>>> ")
    if function_id == 'n' or function_id == 'N':
        print(f"感谢您的使用!")
        break
    function_id = int(function_id)
    # 【一】注册功能
    if function_id == 1:
        while True:
            # 【2】用户输入用户名和密码
            username_register_input = input("请输入用户名 :>>>> ")
            password_register_input = input("请输入密码 :>>>> ")
            # 【3】拼接用户信息
            user_data = f"{username_register_input}|{password_register_input}"
            # 【4】存储到用户信息列表
            user_data_list.append(user_data)
            # 查看用户信息列表
            # print(user_data_list)
            age_input = input("请输入是否继续注册(Y/N) :>>>> ")
            if age_input == 'Y' or age_input == 'y':
                print(f"欢迎再次注册!")
            elif age_input == 'N' or age_input == 'n':
                print(f"感谢您的注册!下次再会!")
                break
            else:
                print(f"意料之外的错误哦!")
                break
    # 【二】登录功能
    elif function_id == 2:
        tag_login = True
        while count <= can_choice and tag_login:
            # 每尝试一次,循环次数 + 1 (可尝试次数 - 1 )
            count += 1
            # 【2】用户输入用户名和密码
            username_input = input("请输入用户名 :>>>> ").strip()
            password_input = input("请输入密码 :>>>> ").strip()

            # 【3】遍历字典,拿到每一个元素
            for user_data in user_data_list:
                true_username, true_password = user_data.split('|')
                # 【7】校验输入的用户名和密码是否一致
                if true_username == username_input and password_input == true_password:
                    print(f"用户 {username_input} :>>>> 登陆成功!")
                    # 登陆成功后程序结束 -- 标志位重置为 False
                    tag_login = False
                    break
            else:
                print(f"用户 {username_input} :>>>> 用户名或密码错误!")
                print(f"还剩 :>>>> {can_choice + 1 - count} 次机会")
            # 【8】增加重试机制 : 输入 Y 将尝试次数重置为1,否则直接退出
            if count == can_choice + 1:
                age_input = input("请输入是否继续尝试(Y/N) :>>>> ")
                if age_input == 'Y' or age_input == 'y':
                    print(f"欢迎再次尝试!祝您成功!")
                    count = 1
                elif age_input == 'N' or age_input == 'n':
                    print(f"感谢您的尝试!下次再会!")
                    break
                else:
                    print(f"意料之外的错误哦!")
                    break
    # 【3】查看用户全部信息
    elif function_id == 3:
        print(user_data_list)

【四】参考代码

# 1.先定义一个用于存储用户数据的列表
data_list = []
# 2.循环打印程序的功能 供用户选择执行
while True:
    # 3.打印程序中所有的功能编号
    print("""
    1.注册
    2.登录
    3.查看所有用户信息
    """)
    # 4.获取用户想要执行的功能编号
    choice = input('请输入功能编号>>>:').strip()
    # 5.判断用户想要执行的功能
    if choice == '1':
        # 6.获取用户的用户名和密码  针对一些小的判断逻辑 你们自己去考虑
        username = input('username>>>:').strip()
        password = input('password>>>:').strip()
        # 6.1.判断用户名不能冲突
        for user in data_list:  # 'jason|123'   'tony|321'
            # 6.2.如果考虑密码是用户名 用户名是其他
            if username == user.split('|')[0]:
                print('用户名已存在')
                break
        else:
            # 7.将用户名和密码拼接到一起
            user_data = f'{username}|{password}'  # 'jason|123'
            # 8.添加到列表中
            data_list.append(user_data)
            # 9.提示用户注册成功
            print(f'{username}注册成功')
    elif choice == '2':
        # 10.获取用户名和密码
        username = input('username>>>:').strip()
        password = input('password>>>:').strip()
        # 11.两种判断思路  思路1:先比对用户名 之后比对密码   思路2:直接拼接比对整体结构
        user_data1 = f'{username}|{password}'
        # 12.循环比对
        for data in data_list:
            if user_data1 == data:
                print('登录成功')
                break
        else:
            print('用户名或密码错误')
    elif choice == '3':
        print(data_list)
    else:
        print('你能不能好好的输 眼瞎是吧!!!')