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

如何优化含大量if条件的成绩判定Python程序?

精简代码并提升效率的方案

优化后的完整代码

def check_subject_mark(subject_name, mark):
    if mark > 100.0:
        print(f"Invalid input for {subject_name}")
        return False
    elif mark >= 35.0:
        print(f"Pass in {subject_name}")
        return True
    else:
        print(f"Fail in {subject_name}")
        return False

while True:
    subjects = ["Tamil", "English", "Chemistry", "Physics", "Non-major", "Python"]
    marks = []
    valid_input = True

    # 批量处理科目输入与验证
    for subject in subjects:
        try:
            mark = float(input(f"Enter your mark in {subject}: "))
            marks.append(mark)
            # 检查当前科目分数并更新输入有效性
            if not check_subject_mark(subject, mark):
                valid_input = False
        except ValueError:
            print(f"Invalid input for {subject} - please enter a number")
            valid_input = False
            break

    # 仅当所有输入有效时计算总分与百分比
    if valid_input:
        total = sum(marks)
        percentage = (total / 600) * 100
        print(f"Your total: {total}")
        print(f"Your percentage: {percentage:.2f}")
    else:
        print("Check your marks")

    # 处理后续计算的输入验证
    while True:
        next_calculation = input("Do you want to proceed with next calculation? (yes/no) ").strip().lower()
        if next_calculation == "no":
            exit()
        elif next_calculation == "yes":
            break
        else:
            print("Invalid input - please enter 'yes' or 'no'")

核心优化点说明

  1. 封装重复逻辑为函数
    把每个科目的分数检查、结果输出逻辑封装到check_subject_mark函数中,彻底消除原代码中重复6次的if判断块,后续新增科目只需修改subjects列表,无需重复编写判断逻辑,代码可维护性大幅提升。

  2. 批量处理科目数据
    用列表存储所有科目名称,通过循环完成输入和检查,替代原代码中重复的单个变量输入语句,减少冗余代码的同时,扩展性更强。

  3. 统一输入有效性管理
    用valid_input变量跟踪所有输入的合法性,一旦某个科目输入无效(非数字或分数超过100),直接标记为无效状态,后续跳过总分计算,避免原代码中重复的多变量判断。

  4. 修复逻辑错误
    原代码中next_calculation != ("yes" or "no")的写法存在逻辑错误("yes" or "no"的结果为"yes"),优化后通过循环强制用户输入有效选项,确保逻辑正确性。

  5. 增强鲁棒性
    新增非数字输入的异常捕获,避免用户输入非数字内容时程序崩溃,提升了程序的容错能力。

  6. 提升代码可读性
    使用f-string格式化输出,变量命名更清晰(如subjects、marks替代单个字母变量),代码结构更直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:40:27