python计算总评成绩

本周(请在4月15日周六晚8点前上交)
stuscore.txt文件中存放着某班学生的计算机课成绩,包含学号、平时
成绩、qm成绩三列。请根据平时成绩占40%,qm成绩占60%的比例计算
总评成绩,请按学号计算每位学生的总评成绩、等级(90分以上优秀,70-
90为良好,其余为通过)。最终再统计学生总人数,按总评成绩计算90分
以上、70~89分,70分以下各成绩区间的人数和班级总平均分(取两位小
数)。
学号平时成绩qm成绩
101534501018086.5
101534501029580.0
1015345010310093.6
101534501046076.4
101534501057588.4
101534501068583.0
101534501078265.2
101534501087877,0

已测过,stuscore.txt与本程序同目录,供参考:

# 定义学生成绩等级函数
def get_grade(score):
    if score >= 90:
        return "优秀"
    elif score >= 70:
        return "良好"
    else:
        return "通过"

# 初始化变量
total_score = 0
total_num = 0
excellent_num = 0
good_num = 0
pass_num = 0

# 处理数据
lines = []
with open('stuscore.txt', 'r') as f:
    f.readline()  # 跳过第一行
    for line in f.readlines():
        lines.append(line)
        # 分割每行数据,获取学号、平时成绩和期末成绩
        items = line.strip().split()
        sid = items[0]
        daily_score = float(items[1])
        final_score = float(items[2])

        # 计算总评成绩
        total_score = daily_score * 0.4 + final_score * 0.6

        # 计算学生总人数和各成绩区间的人数
        total_num += 1
        if total_score >= 90:
            excellent_num += 1
        elif total_score >= 70:
            good_num += 1
        else:
            pass_num += 1

        # 输出学生总评成绩和等级
        print("学号:{},总评成绩:{:.2f},等级:{}".format(sid, total_score, get_grade(total_score)))

# 计算班级总平均分
class_avg_score = sum(
    [float(line.strip().split()[1]) * 0.4 + float(line.strip().split()[2]) * 0.6 for line in lines]) / total_num

# 输出各成绩区间的人数和班级总平均分
print("90分以上:{}人".format(excellent_num))
print("70-89分:{}人".format(good_num))
print("70分以下:{}人".format(pass_num))
print("班级总平均分:{:.2f}".format(class_avg_score))