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

