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

Python如何将输入值与多个可选值比较?判断逻辑bug修复咨询

错误点拆解

    1. 条件判断逻辑错误
      if choice =='A' or 'a'这类写法不符合Python语法规则,or两侧是独立的布尔运算表达式,非空字符串'a'的布尔值恒为True,所以无论输入什么值,第一个if判断永远成立,直接进入新增联系人逻辑。
    1. 无循环逻辑支撑多次操作
      代码仅会执行一次菜单判断,即使在分支内重新获取了用户输入的choice,也不会回到判断分支重新匹配对应操作,执行完单个分支后程序就会直接结束。
    1. 集合操作方法误用
      修改联系人分支使用update()方法更新集合,update()会将传入的字符串拆分为单个字符逐一存入集合,完全不符合存储完整姓名、邮箱的需求。
    1. 数据存储结构不合理
      姓名和邮箱分别存在两个独立的set中,二者没有对应关联,无法实现修改、删除指定联系人的需求,会出现删了姓名还留着邮箱、数据对应错乱的问题。
    1. 冗余代码
      打印菜单时给print()的返回值赋值给v/a/c等变量完全无用,print()的返回值是None,这些变量没有任何使用意义。

修复方案

修正逻辑说明

  1. 把条件判断改为if choice.lower() == 'a'的写法,可同时匹配大小写输入,逻辑正确
  2. 加while True循环包裹菜单和判断逻辑,支持用户多次操作直到选择退出
  3. 改用字典存储联系人数据,以姓名为key,邮箱为value,保证二者的对应关系
  4. 修正集合操作的错误,改用字典的增删改方法实现对应功能,同时增加存在性判断避免异常
  5. 删除冗余的变量赋值代码

修复后完整代码

# 用字典存储联系人,key为姓名,value为邮箱
contacts = {}

while True:
    # 打印菜单
    print('-=-=- Menu -=-=-')
    print('V. View Contacts')
    print('A. Add New Contact')
    print('C. Change Contact')
    print('D. Delete Contact')
    print('Q. Quit\n')
    
    choice = input('Enter your choice: ').strip()

    if choice.lower() == 'a':
        print('-=-=- Enter the New Contact Name and Email -=-=-\n')
        add_name = input('Enter Contact Name: ').strip()
        if add_name in contacts:
            print('该联系人已存在!\n')
            continue
        add_email = input('Enter Contact Email: ').strip()
        contacts[add_name] = add_email
        print('联系人添加成功!\n')
        
    elif choice.lower() == 'v':
        print('-=-=-=-=-=-=-=-=-=-=-=-')
        print('-=-=-=- Name, Email -=-=-=-')
        for name, email in contacts.items():
            print(f'{name}, {email}')
        print('\n')
        
    elif choice.lower() == 'c':
        print('-=-=-=-=-=-=-=-=-=-=-=-\n')
        changed_name = input('Enter Contact Name:').strip()
        if changed_name not in contacts:
            print('该联系人不存在!\n')
            continue
        changed_email = input('Enter New Contact Email: ').strip()
        contacts[changed_name] = changed_email
        print('联系人信息修改成功!\n')
        
    elif choice.lower() == 'd':
        print('-=-=-=-=-=-=-=-=-=-=-=-\n')
        delete_name = input('Enter Contact Name You Wish to Delete: ').strip()
        if delete_name not in contacts:
            print('该联系人不存在!\n')
            continue
        del contacts[delete_name]
        print('联系人删除成功!\n')
            
    elif choice.lower() == 'q':
        print('Goodbye')
        break
    
    else:
        print('输入无效,请重新选择!\n')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:54:05