Python中range匹配末尾数值失效的问题排查与解决
问题原因
Python里的range(start, end)是左闭右开的区间——意思是包含start,但绝对不包含end。比如你写的range(1,5)只会匹配1、2、3、4这四个数,5根本不在这个区间里;同理range(6,10)只能匹配6到9,漏了10;range(14,16)匹配14、15,漏了16。这些没被覆盖的数值就会掉进else分支,输出error。
顺带提一句:你用random.randrange(1,20)生成的chance取值是1到19(因为randrange也是左闭右开),所以最后一个分支range(19,20)是对的,能正常匹配19。
修复方案
要继续用range的话,把每个range的右边界改成你需要包含的最大值+1,确保区间能覆盖所有目标数值:
修改后的条件判断代码:
if chance in range(1, 6): # 覆盖1-5 randAgeClass = "Newborn" elif chance in range(6, 11): # 覆盖6-10 randAgeClass = "Young" elif chance in range(11, 13): # 覆盖11-12,无需调整 randAgeClass = "Aged" elif chance in range(14, 17): # 覆盖14-16 randAgeClass = "Old" elif chance in range(17, 18): # 覆盖17,无需调整 randAgeClass = "Ancient" elif chance in range(19, 20): # 覆盖19,无需调整 randAgeClass = "Timeless" else: print("error")
调整后,1到19的所有数值都会被正确匹配,不会再触发error。
另外给个小建议:其实不用in range,直接写数值比较(比如1 <= chance <=5)更直观,也不会踩左闭右开的坑,但既然你指定要用range,上面的修改就完全能解决问题。
内容的提问来源于stack exchange,提问作者Keenonthedaywalker
相关产品推荐
相关产品推荐

