吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1353|回复: 1
收起左侧

[求助] python小白求助!!!!

[复制链接]
zl1997 发表于 2019-8-1 17:25
##第一次发帖求助
##做作业时遇到的问题
## 这是作业要求
1.用户注册登录系统V2.0
  • 字符串、列表、字典综合应用
  • 设计一个程序
  • 要求用户可以实现登录、注册、注销登录等功能
  • 用户的用户名(长度6-20)、密码(长度8-20)、昵称、年龄信息保存到字典中
  • 将每个已注册用户的保存到列表中,即将上一步的字典保存到列表中
  • 维护用户的登录状态,每次只能有一个用户处于登录状态,直到选择注销登录
  • 如果不选择退出系统,该程序应当一直运行

*______________________________________________________________________


##但是我做完后看结果,发现只要输入俩个及以上的用户就会出现message_list列表里出现俩个或多个最后输入的用户信息,以前的用户信息就没有了!!
请教大佬 这是咋回事呀!
(做的太差见谅)
# username 用户名
# password 密码
# nickname 昵称
# age 年龄
message_dict = {}  # 存储注册的用户信息message_list = []  # 存储全部注册的用户


# 判断用户名的长度是否为2-20
def usernamelen(zuce1):
    while True:
        if 2 <= len(zuce1) <= 20:
            print("您的用户名是:", zuce1)
            break
        else:
            print("请输入6到20长度的用户名")
            zuce1 = input("您的用户名(长度2-20):")


# 判断密码的长度是否为8-20
def passwordlen(zuce2):
    while True:
        if 8 <= len(zuce2) <= 20:
            print("您的密码是:", zuce2)
            break
        else:
            print("请输入8到20长度的密码")
            zuce2 = input("您的密码(长度8-20):")


# 注册模块
def zuce():
    print("注册")
    zuce1 = input("您的用户名(长度2-20):")
    usernamelen(zuce1)
    zuce2 = input("您的密码(长度8-20):")
    passwordlen(zuce2)
    zuce3 = input("您的昵称是:")
    zuce4 = input("您的年龄是:")
    message_dict["username"] = zuce1
    message_dict["password"] = zuce2
    message_dict["nickname"] = zuce3
    message_dict["age"] = zuce4
    list2 = message_dict
    return list2



# 登录模块
def denglu():
    print("登录")
    while True:
        j = 0
        xiajiaobiao = len(message_list)
        while j < xiajiaobiao:
            denglu1 = input("请输入您的用户名:")
            print(message_list)
            print(message_list[j]["username"])
            if message_list[j]["username"] == denglu1:
                denglu2 = input("请输入您的密码:")
                if message_list[j]["password"] == denglu2:
                    print("您的信息是:")
                    print(f"用户名:{message_dict['username']}\n昵称:{message_dict['nickname']}\n年龄:{message_dict['age']}")
                    break
                else:
                    print("密码错误")
                    continue
            else:
                print("用户名错误")
                continue
            j += 1
        else:
            break


# 注销登录
def zhuxiao():
    zhuxiao1 = int(input("是否退出系统,是1 否0:"))
    if zhuxiao1 == 1:
        print("-" * 30)
    elif zhuxiao1 == 0:
        print("您的信息是:")
        print(f"用户名:{message_dict['username']}\n昵称:{message_dict['nickname']}\n年龄:{message_dict['age']}")
    else:
        print("输入有误!")


list2 = zuce()
t = 0
while t < 99999999999:
    message_list.insert(t, list2)
    i = int(input("是否继续注册?是1 否0:"))
    if i == 1:
        zuce()
        t += 1
    elif i == 0:
        break
    else:
        print("输入错误!")


denglu()
while True:
    i = int(input("是否注册新的账号?是1 否0:"))
    if i == 1:
        zuce()
    elif i == 0:
        break
    else:
        print("输入错误!")
zhuxiao()
congxindenglu = int(input("是否重新登录 是1 否0:"))
if congxindenglu == 1:
    denglu()
elif congxindenglu == 0:
    print("再见!")
else:
    print("输入错误!")

print(message_list[0]["username"])

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

大脑组织残缺 发表于 2019-8-3 00:19
经过各种尝试,只发现在#注册模块内生成message_dict字典时 message_list列表就已经变化了,与你的list2变量无关,(把与#注册模块,while t<999999999: 内容无关的东西全部删除之后,尝试了修改zuce函数内-除第一次外-生成message_dict字典后再吧list2变量改为其他内容,message_list列表中第一个字典会直接变成第二个输入的信息,此时还未调用while循环中的message_list列表的添加功能-也把insert方法改为append方法试过无果-message_list列表中只有一个字典。所以问题不出在list2参数的传递 也不出在message_list列表的添加字典。) 至于为什么会这样,我也想不明白,只能说你代码写错了,而且纵观你的代码错的不止这一处,(比如登录的循环模块有问题,密码长度虽然能提示但保存的还是第一个等等)我只能帮你重写一份了
[Python] 纯文本查看 复制代码
# username 用户名
# password 密码
# nickname 昵称
# age 年龄

message_list = []


def zhuce():    # 注册模块

    while True:     # 用户名循环
        username = input('请输入用户名(长度6-20):')
        if len(username) < 6:
            print('用户名太短!', end='\t')
        elif len(username) > 20:
            print('用户名太长!', end='\t')
        else:
            break

    while True:     # 密码循环
        password = input('请输入密码(长度8-20):')
        if len(password) < 8:
            print('密码太短!', end='\t')
        elif len(password) > 20:
            print('密码太长!', end='\t')
        else:
            break

    nickname = input('请输入昵称:')

    while True:     # 年龄循环
        age = input('请输入年龄:')
        if age.isdigit():
            age = int(age)
            break
        else:
            print('请输入整数!', end='\t')

    message_dict = {'用户名': username,
                    'password': password,
                    '昵称': nickname,
                    '年龄': age}
    message_list.append(message_dict)
    print('注册完成!')


def denglu():   # 登录模块

    if len(message_list) == 0:  # 判断是否有用户注册
        print('请先注册!')
        return False, None

    input_username = input('请输入用户名:')
    i = 0
    while i < len(message_list):    # 判断用户名是否错误
        if input_username == message_list[i]['用户名']:
            break
        else:
            i += 1
    if i == len(message_list):
        print('该用户名不存在!请重新输入!')
        denglu()

    while True:
        input_password = input('请输入密码:')    # 判断密码是否正确
        if input_password == message_list[i]['password']:
            print('登录成功!\n您的登录信息为:')
            for p, q in message_list[i].items():
                if p == 'password':
                    continue
                else:
                    print(p, '--', q)
            return True, i
        else:
            print('密码错误! 请重新输入!')


def zhuxiao(numb):  # 注销模块
    print('当前用户信息为:')
    for p, q in message_list[numb].items():
        if p == 'password':
            continue
        else:
            print(p, '--', q)
    while True:
        key = input('是否注销?[1.确认][2.取消]\n>>> ')
        if key == '1':
            return False
        elif key == '2':
            return True
        else:
            print('输入错误,请重新输入!')


def action():   # 主控模块
    set_sss = False     # 登录状态
    apple = None      # 登录所在列表位置
    print("=====================\n欢迎使用登录系统V2.0!")
    while True:
        print("*********************")
        key = input('用户注册请按【1】,登录请按【2】\n注销请按【3】,退出请按【4】\n充值VIP请按【99999】\n>>> ')
        if key == '1':
            print('=====================')
            zhuce()
        elif key == '2':
            print('=====================')
            if set_sss:
                print('您已登录:')
                for p, q in message_list[apple].items():
                    if p == 'password':
                        continue
                    else:
                        print(p, '--', q)
            else:
                set_sss, apple = denglu()
        elif key == '3':
            print('=====================')
            if set_sss:
                set_sss = zhuxiao(apple)
            else:
                print('您还未登录')
        elif key == '4':
            print('=====================\n谢谢使用,再见!')
            break
        elif key == '99999':
            print('=====================\n出门左转别回头!!!')
        else:
            print('无效操作,重新输入!')


action()

写的很清楚,备注也很清楚,只简单的测试了一遍,还可以的话顶起来,有问题call我,再改。我也刚入门
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-27 02:29

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表