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

Python密码库菜单开发:如何不终止while循环处理未知输入?

密码库菜单循环优化方案

原代码的核心问题:

  • 菜单仅在循环外打印一次,输入也只获取一次,后续循环使用的是被强行赋值为True的变量,完全偏离用户输入的选项
  • 遇到未知选项时用break直接终止循环,导致无法重新输入
  • 逻辑分支混乱,if menu_item == "4"和后续else未正确关联,执行完有效选项后也会触发未知提示

以下是无需重复代码的优化实现:

password_vault = {}  # 假设这是你的密码库字典
def validate(email, pwd):
    # 此处为你的验证逻辑占位
    pass

while True:
    # 每次循环自动打印菜单,无需重复编写代码
    print("   ======Menu======") 
    print("1. View Password Vault")
    print("2. Add a new credential")     
    print("3. Update an existing credential")
    print("4. Exit")
    
    menu_item = input("\nChoose a menu item: ")
    
    if menu_item == "1":
        print(password_vault)
    elif menu_item == "2":
        website_name = input("What site: ")
        email_address = input("What email: ")
        password = input("What password: ")
        validate(email_address, password)
        password_vault[website_name.title()] = {email_address: password}
    elif menu_item == "3":
        website_name = input("What site: ")
        email_address = input("What email: ")
        password = input("What password: ")
        if website_name.title() in password_vault:  # 统一用title()避免大小写匹配问题
            validate(email_address, password)
            password_vault[website_name.title()] = {email_address: password}
            print(password_vault)
        else:
            print("该网站不存在于密码库中")
    elif menu_item == "4":
        print("退出程序")
        break  # 仅选择退出时终止循环
    else:
        print("Unknown value entered. Please try again!")
        # 不写break,循环自动回到开头,重新显示菜单并接收输入

优化关键点:

  • 把菜单打印和输入逻辑放进while True循环内部,每次循环都会重新加载菜单并获取新输入,彻底避免重复代码
  • 仅当用户选择4时才用break终止循环,其他情况(包括未知选项)都会自动回到循环起始位置,让用户重新选择
  • 修正了原代码中覆盖输入值的错误,每次循环都重新获取有效的menu_item
  • 补充了选项3中网站不存在的提示,完善逻辑完整性

内容的提问来源于stack exchange,提问作者robotkisser

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:25:19