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
相关产品推荐
相关产品推荐

