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

Python编程风格与空值规避:条件题函数代码重复问题咨询

解决成绩等级函数的代码重复问题

嘿,我太懂你这种困扰了——刚啃《How to Think Like a Computer Scientist (Python 3版)》的时候,写条件语句练习题总忍不住堆一堆重复的if-elif,尤其是判断成绩区间这种场景,写完看着就觉得冗余。我当年学这本书时也踩过一模一样的坑!

先猜一下你最初的代码大概是这种典型的重复写法(毕竟新手很容易这么写):

def get_grade(mark):
    if 90 <= mark <= 100:
        return 'A'
    elif 80 <= mark < 90:
        return 'B'
    elif 70 <= mark < 80:
        return 'C'
    elif 60 <= mark < 70:
        return 'D'
    elif 0 <= mark < 60:
        return 'F'
    else:
        return 'Invalid mark'

逻辑是对的,但每个条件都重复写区间上下限,后续要改等级规则(比如加A+、调整及格线)的时候,就得逐个修改,不仅麻烦还容易出错。

这里给你两种实用的优化方案,彻底消除代码重复:

1. 利用条件判断的短路特性简化(最上手)

其实我们可以省略每个条件的下限判断——因为前面的if-elif已经排除了更高区间的情况。比如当程序走到elif mark >=80时,肯定已经不满足mark >=90了,所以完全不用写80<=mark<90这种重复的区间。

优化后的代码是这样的:

def get_grade(mark):
    # 先做合法性校验,单独抽出来避免重复判断
    if not (0 <= mark <= 100):
        return 'Invalid mark'
    if mark >= 90:
        return 'A'
    elif mark >= 80:
        return 'B'
    elif mark >= 70:
        return 'C'
    elif mark >= 60:
        return 'D'
    else:
        return 'F'

这样每个条件只保留一个上限判断,去掉了重复的下限比较,代码一下子清爽很多,可读性也更强。

2. 用映射列表存储等级规则(可扩展性拉满)

如果之后需要频繁调整等级体系(比如新增A+、B-这类细分等级),用列表存储区间阈值和对应等级的方式会更灵活,直接把重复的if-elif块替换成一次遍历:

def get_grade(mark):
    # 把等级规则集中存成列表,按分数从高到低排序
    grade_rules = [
        (95, 'A+'),
        (90, 'A'),
        (85, 'B+'),
        (80, 'B'),
        (70, 'C'),
        (60, 'D'),
        (0, 'F')
    ]
    
    if not (0 <= mark <= 100):
        return 'Invalid mark'
    
    # 遍历规则列表,匹配第一个符合的等级
    for threshold, grade in grade_rules:
        if mark >= threshold:
            return grade
    
    return 'Invalid mark'

这种方式的好处是,修改等级规则完全不用碰判断逻辑——要加新等级就往列表里插个元组,要调阈值就改数字就行,彻底告别重复代码。而且代码逻辑和规则数据分离,符合Python的最佳实践思路。

另外关于你说的这本书对Python 3最佳实践讲得少的问题,其实可以做完书中练习后,补点PEP8的基础内容(比如函数命名用下划线、缩进统一4空格这些),再结合一些简单的项目练手,慢慢就能积累起规范的编码习惯啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:08:06