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

Python字典如何校验输入是键或值并获取对应的姓名和编码?

现有代码问题汇总
  • 类型不匹配:user_input 是字符串类型,直接判断是否在整数类型的my_dict.values()里永远不成立,会进入死循环
  • 方法调用语法错误:list.index()是方法,应该用圆括号传参,你写成了方括号index[numval],会报语法错误
  • 变量名拼写不一致:定义的变量是pos_of_Name,后续取值时写成了小写的pos_of_name,会报未定义错误
  • 输入更新逻辑错误:重新提示输入后赋值给了chosenSchool,没有更新user_input变量,循环校验的永远是第一次输入的内容
  • 逻辑覆盖不全:只有输入是数字的分支逻辑,没有兼容输入是姓名的场景,且校验失败重新输入后没有重新判断输入类型
正确实现方案

推荐先构造值到键的反向映射字典,比操作两个列表更高效不易出错,完整实现代码如下:

my_dict = {'Bob' : 11, 'Sandy':12, 'Katy':13}
# 构造反向映射:编码->姓名
code_to_name = {v: k for k, v in my_dict.items()}

while True:
    user_input = input('请输入姓名或编码:').strip()
    # 先判断是否为姓名
    if user_input in my_dict:
        name_person = user_input
        numval = my_dict[user_input]
        break
    # 再判断是否为数字编码
    if user_input.isdecimal():
        input_code = int(user_input)
        if input_code in code_to_name:
            name_person = code_to_name[input_code]
            numval = input_code
            break
    # 都不匹配提示重新输入
    print('输入不合法,请输入正确的姓名或编码')

# 可直接使用最终的 name_person 和 numval 变量
print(f'姓名:{name_person},编码:{numval}')

该实现的优势:

  • 不需要额外维护两个独立的姓名、编码列表,避免列表顺序不一致导致的匹配错误
  • 校验逻辑闭环,每次输入都会做全场景校验,不会出现死循环
  • 即使后续字典新增/删除元素,反向映射会自动同步,不需要手动更新列表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:06:10