You need to enable JavaScript to run this app. Python新手基于类与while循环实现5名学生成绩录入,如何计算全体总平均分及代码优化
优惠活动
大模型
产品
解决方案
定价
更多

Python新手基于类与while循环实现5名学生成绩录入,如何计算全体总平均分及代码优化

代码问题排查与优化实现

现有代码的待优化点

  • 类Marks的定义被嵌套在while循环内部,每轮循环都会重复定义同一个类,造成不必要的资源开销,类作为实例模板应该只在全局定义一次
  • 缺少跨循环的累加变量存储每个学生的平均成绩,无法支撑最终整体平均的计算
  • 单个学生的平均成绩计算逻辑硬编码在打印输出的output()方法中,无法独立获取计算结果用于后续统计

核心功能实现步骤(解决整体平均计算的问题)

  • 将Marks类的定义移出循环,仅做一次全局定义
  • 在循环启动前初始化全局累加变量total_avg_sum = 0,专门用于累计每一位学生的平均成绩
  • 拆分类的方法逻辑:新增独立的get_individual_avg()方法,专门计算并返回单个学生的平均成绩,和打印输出逻辑解耦
  • 每完成一名学生的信息录入,调用方法获取其平均成绩,累加到全局累加变量中
  • 所有学生录入完成后,用累加的总平均值除以学生总数,即可得到5名学生的整体平均成绩

优化后的完整可运行代码

# 全局定义学生成绩类,仅初始化一次
class Marks():
    def __init__(self, name, english_marks, hindi_marks, science_marks, economics_marks):
        self.name = name
        self.english_marks = english_marks
        self.hindi_marks = hindi_marks
        self.science_marks = science_marks
        self.economics_marks = economics_marks

    # 独立方法:计算返回单个学生的平均成绩
    def get_individual_avg(self):
        return (self.english_marks + self.hindi_marks + self.science_marks + self.economics_marks) / 4

    # 独立方法:打印单个学生的成绩信息
    def output(self):
        print("\n")
        print(f"Hi {self.name.title()}")
        print(f"Your average score is {self.get_individual_avg():.2f}")
        print("\n")

# 初始化统计变量
total_avg_sum = 0
STUDENT_TOTAL = 5  # 固定录入5名学生
entry = 1

while entry <= STUDENT_TOTAL:
    # 录入当前学生的信息
    name = input("Enter your name: ")
    english_marks = int(input("Enter your English score: "))
    hindi_marks = int(input("Enter your Hindi score: "))
    science_marks = int(input("Enter your science score: "))
    economics_marks = int(input("Enter your economics score: "))

    # 创建当前学生的类实例
    current_student = Marks(name, english_marks, hindi_marks, science_marks, economics_marks)
    # 打印当前学生的成绩
    current_student.output()
    # 累加当前学生的平均成绩到总统计值
    total_avg_sum += current_student.get_individual_avg()

    entry += 1

# 计算并输出所有学生的整体平均成绩
overall_avg = total_avg_sum / STUDENT_TOTAL
print("="*30)
print(f"Overall average score of all {STUDENT_TOTAL} students is: {overall_avg:.2f}")

额外优化说明

  • 累加变量total_avg_sum必须定义在循环外部,一旦放在循环内部,每轮循环都会重新把变量初始化为0,永远无法累计之前循环的统计值
  • 把固定常量(比如学生总人数)定义为大写命名的全局变量,后续如果要调整录入学生的数量,只需要修改常量值即可,不需要改动循环逻辑
  • 用格式化字符串输出时增加小数位控制,避免成绩显示出现过长的浮点数
  • 拆分类方法的设计符合单一职责原则,后续如果需要调整成绩计算规则(比如新增考试科目、调整不同科目的权重),只需要修改get_individual_avg()方法,不会影响打印输出的逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 17:06:03