Python 3登录后无法跳转至菜单系统的问题排查
问题分析与修复方案
核心问题
你的代码存在三个关键问题导致无法进入菜单:
- 登录成功后
main函数里的while True循环用了continue,会直接回到循环开头重新执行登录,永远没机会调用菜单 inventory-checker分支中continue写在print语句前面,导致这条打印永远不会执行- 定义好的
menu()函数从未被调用,且程序没有从登录流程切换到菜单流程的逻辑
修复后的完整代码
# Aaron Dyer Software Engineering Fundamentals Data Base # 提示用户选择注册或登录 print("请选择操作:1. 注册 2. 登录") choice = input("输入选项:") def add_new_user(): username = input("输入用户名: ") password = input("输入密码: ") user_type = input("输入用户类型 (admin, inventory-checker): ") with open("userdata.txt", "a") as f: f.write(f"{username} {password} {user_type}\n") def user_authentication(): username = input("输入用户名: ") password = input("输入密码: ") with open("userdata.txt", "r") as f: for line in f: user_data = line.strip().split() if user_data[0] == username and user_data[1] == password: print("登录成功!") return user_data[2] print("用户名或密码错误。") return None def menu(user_type): print(f"\n当前登录身份: {user_type}") print("[1] 笔记本电脑") print("[2] iPhone") option = input("选择设备类型: ") if option == "1": print("[1] S5750") print("[2] S5577") print("[3] S5563") print("[4] S5744") print("[5] S5765") print("[6] S5944") print("[7] S5507") print("[8] S5509") laptop_option = input("选择具体型号: ") # 这里可以添加对应型号的逻辑 print(f"你选择了笔记本型号: {laptop_option}") elif option == "2": print("[1] iPhone 15") print("[2] iPhone 14") print("[3] iPhone 13") iphone_option = input("选择具体型号: ") print(f"你选择了iPhone型号: {iphone_option}") else: print("无效选项,请重新选择。") # 菜单循环,允许用户多次操作 menu_choice = input("是否继续操作?(y/n): ") if menu_choice.lower() == "y": menu(user_type) def main(): global choice if choice == "1": add_new_user() print("注册完成,请登录。") # 登录循环,直到成功登录 while True: user_type = user_authentication() if user_type is not None: # 登录成功后调用菜单 menu(user_type) break if __name__ == "__main__": main()
关键修改说明
- 新增注册/登录选择逻辑,不再强制每次运行都先注册
- 登录成功后不再用
continue,而是调用menu(user_type)并传入用户身份,执行完菜单后用break退出登录循环 - 移除
inventory-checker分支中无效的continue,改为在菜单中展示用户身份 - 给
menu函数添加用户身份参数,支持后续根据身份扩展不同权限的操作 - 菜单内部添加循环逻辑,允许用户多次操作后再退出
- 修复写入文件时的换行符问题,确保每条用户数据单独一行
- 读取用户数据时添加
strip()处理,避免空行或换行符干扰验证逻辑
内容的提问来源于stack exchange,提问作者DYER101
相关产品推荐
相关产品推荐

