You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Lookup或HashMap替代多分支if-else语句?

移除多分支条件判断实现利润评级计算

这里提供两种无需if/elif/else的实现方式,完全贴合你原代码的逻辑:

方法一:整数除法 + 边界限制

利用整数除法的特性直接计算评级,代码简洁高效:

# 计算基础评级
profit_rating = (Profit + 9999) // 10000
# 确保评级不超过10(对应原else分支)
profit_rating = min(profit_rating, 10)
print(f'Profit Rating is {profit_rating}')

原理说明

通过给Profit加上9999,把每个区间的起始值对齐到10000的整数倍:

  • 当Profit ≤10000时,(Profit+9999)的范围是9999~19999,整数除以10000结果为1
  • 当10001≤Profit≤20000时,(Profit+9999)的范围是20000~29999,整数除以10000结果为2
  • 以此类推,直到80001≤Profit≤90000时结果为9
  • 当Profit>90000时,计算结果会≥10,用min()函数限制为10,和原代码的else分支逻辑一致

方法二:bisect模块实现区间查找

如果后续需要调整阈值,这种方式更易维护:

import bisect

# 定义各评级对应的阈值和评级列表
thresholds = [10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000, 90000]
ratings = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 查找对应评级
profit_rating = ratings[bisect.bisect_right(thresholds, Profit)]
print(f'Profit Rating is {profit_rating}')

原理说明

bisect.bisect_right()会返回Profit在thresholds列表中应该插入的位置,这个位置刚好对应ratings列表的索引:

  • Profit ≤10000时,插入位置为0,对应ratings[0]=1
  • 10001≤Profit≤20000时,插入位置为1,对应ratings[1]=2
  • Profit>90000时,插入位置为9,对应ratings[9]=10,完全匹配原代码的分支逻辑

内容的提问来源于stack exchange,提问作者Akash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 18:45:39