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

基于整数数值分组,如何替换多if elif语句实现字母等级赋值

方案1:使用bisect模块(最简洁推荐)

bisect是Python标准库内置的二分查找模块,刚好适配这类区间匹配场景,只需要提前定义好分数阈值和对应等级的映射即可:

import bisect

# 以下两个序列可以定义为类变量,所有实例共享,无需重复初始化
score_thresholds = [25, 50, 70, 80, 90]
grade_levels = ['f', 'e', 'd', 'c', 'b', 'a']

# 等级赋值核心逻辑仅需一行
self.g = grade_levels[bisect.bisect_left(score_thresholds, self.x)]

这个方案的优势:

  • 代码量极精简,没有冗余的分支判断
  • 后续调整分数阈值、等级规则时,只需要修改两个序列的内容,不需要调整逻辑代码
  • 底层是二分查找实现,就算后续区间数量大幅增加,性能也远高于逐层if判断

方案2:无额外依赖的遍历匹配方案

如果不想导入额外模块,可以把阈值和等级打包成规则元组遍历判断,比零散的if/elif易维护很多:

# 规则集可以定义为类变量,统一维护
grade_rules = (
    (25, 'f'),
    (50, 'e'),
    (70, 'd'),
    (80, 'c'),
    (90, 'b'),
    (101, 'a'), # 由于x最大为100,最后阈值设为101即可覆盖原else分支场景
)

for threshold, grade in grade_rules:
    if self.x < threshold:
        self.g = grade
        break

这个方案的优势:

  • 不需要导入任何模块,纯原生语法实现
  • 所有规则集中在grade_rules里,修改调整非常直观,不容易出现判断条件写错的问题

补充:如果可以保证x的取值一定在[0,100]范围内,两个方案都不需要额外加边界校验;如果存在越界可能,只需要在赋值前加一行范围判断即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:36:02