zl1997 发表于 2019-8-1 17:25

python小白求助!!!!

##第一次发帖求助
##做作业时遇到的问题
## 这是作业要求
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列表的添加字典。) 至于为什么会这样,我也想不明白,只能说你代码写错了,而且纵观你的代码错的不止这一处,(比如登录的循环模块有问题,密码长度虽然能提示但保存的还是第一个等等)我只能帮你重写一份了

# 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['用户名']:
            break
      else:
            i += 1
    if i == len(message_list):
      print('该用户名不存在!请重新输入!')
      denglu()

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


def zhuxiao(numb):# 注销模块
    print('当前用户信息为:')
    for p, q in message_list.items():
      if p == 'password':
            continue
      else:
            print(p, '--', q)
    while True:
      key = input('是否注销?\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.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我,再改。我也刚入门
页: [1]
查看完整版本: python小白求助!!!!