Python用range作字典键时区间最大值匹配返回None如何修复
问题原因
- Python 内置的
range遵循左闭右开的区间规则,range(a, b)只会包含大于等于a且小于b的整数,不会包含结束值b。你当前定义的所有区间结束值刚好是匹配失败的数值,这些值不在任何range的覆盖范围内,函数走完循环没有命中匹配就会默认返回None。
修复方案
直接调整每个range的结束值,把原结束值加1即可覆盖到边界值,修改后的完整代码如下:
def mob_attack(minimum_roll, mob_size): table = { range(1, 6): 1, # 覆盖1-5 range(6, 13): 2, # 覆盖6-12 range(13, 15): 3,# 覆盖13-14 range(15, 17): 4,# 覆盖15-16 range(17, 19): 5 # 覆盖17-18 } for key in table: if minimum_roll in key: return mob_size // table[key] # 用//直接取整数商更符合Python习惯,也避免浮点数精度问题 # 可根据业务需要添加兜底逻辑,比如参数超出范围时报错 raise ValueError(f"minimum_roll {minimum_roll} 不在有效范围1-18内")
内容的提问来源于stack exchange,提问作者Chris Wilson
相关产品推荐
相关产品推荐

