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"])
经过各种尝试,只发现在#注册模块内生成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]