You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 01:45:37