本周(请在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))