使用比较判断时如何简化冗长的if/elif条件语句
简化方案
方案1:数学公式法(适合当前固定线性间隔的场景)
你这段代码的判断逻辑是每间隔8个数值,y递增1,完全可以用整数运算直接算出结果:
y = (num - 1) // 8 + 1 # 如果需要确保负数、超过57的数值也完全匹配原逻辑,可以加上边界钳制 y = max(1, min(8, (num - 1) // 8 + 1))
数值验证:
- num=8时:(8-1)//8 +1 = 0 +1 =1,符合原逻辑
- num=9时:(9-1)//8 +1 =1 +1=2,符合原逻辑
- num=56时:(56-1)//8 +1=6 +1=7,符合原逻辑
- num=57时:(57-1)//8 +1=7 +1=8,符合原逻辑
方案2:二分查找法(适合后续可能调整分界值的场景)
如果后续你的分界阈值可能改成非线性规则,用bisect模块的二分查找实现的代码可维护性更强:
import bisect thresholds = [9, 17, 25, 33, 41, 49, 57] y = bisect.bisect_right(thresholds, num) + 1
后续需要调整规则时,只要修改thresholds列表里的分界值即可,不用改动逻辑代码。
内容的提问来源于stack exchange,提问作者SomeoneLudo
相关产品推荐
相关产品推荐

