Python如何匹配code变量前2/3位编码并返回字典对应国家键
代码问题修复方案
原代码核心错误点
or逻辑使用错误:Python中a or b的判断规则是如果a为真值(非0、非空等)就直接返回a,不会再计算b。你的代码里前两位截取的是56,为非0真值,所以永远只会拿到前两位的数值,不可能匹配到冰岛对应的3位编码569。- 变量作用域错误:前缀数值
value定义在函数外部,不会随传入函数的code动态计算,复用性差。 - 错误提示逻辑错误:循环中每匹配失败一个国家就打印"Code not valid",会出现多次错误输出,不符合实际需求。
修改后可运行代码
code = "569010002151" countrycode = { "Norway": 70, "Denmark": 57, "Sweden": 73, "Finland": 64, "Iceland": 569 } def country(code): # 先后提取前3位、前2位的数值,优先匹配更长的3位编码避免误判 prefix_list = [int(code[:3]), int(code[:2])] for k, v in countrycode.items(): if v in prefix_list: print(f"The code is from {k}") # 匹配成功直接返回终止函数 return # 所有国家都匹配失败再输出错误 print("Code not valid") country(code)
关键修改说明
- 把前缀提取改成了先取前3位、再取前2位的列表,优先匹配更长的3位编码,避免出现3位编码的前两位刚好命中其他国家编码的误判问题。
- 把前缀计算逻辑移到了函数内部,保证每次传入新的
code都会重新计算对应前缀。 - 调整了错误提示的位置,只有循环完所有国家都没有匹配成功的时候,才输出无效提示。
- 匹配成功后直接用
return终止函数,避免后续不必要的循环判断。
测试你给出的示例code569010002151时,会输出预期结果The code is from Iceland。
内容的提问来源于stack exchange,提问作者vidar
相关产品推荐
相关产品推荐

