120名同学的成绩存放在成绩表.csv文件中,成绩分为平时成绩和期末成绩两列,最终成绩为:平时成绩*0.2+期末成绩*0.8,现编程处理成绩,得到最终成绩,并求出:最高分,最低分,平均分,中位数,标准方差,每个分数阶段的人数占比(A率,B率,C率,D率,E率),将成绩由高到低排序,绘制成绩分布图,结果输出到out.txt文件中。
时间: 2024-01-04 10:03:42 浏览: 67
C语言程序设计-统计出若干个学生的平均成绩,最高分以及得最高分的人数;
5星 · 资源好评率100%
好的,这是一个比较复杂的问题,需要一步步来进行处理。首先,我们需要读取成绩表.csv文件,然后计算每个同学的最终成绩。代码如下:
```python
import csv
import math
# 读取成绩表
with open('成绩表.csv', 'r') as f:
reader = csv.reader(f)
scores = []
for row in reader:
if row[0].isdigit():
score = float(row[1]) * 0.2 + float(row[2]) * 0.8
scores.append(score)
```
接下来,我们可以计算最高分、最低分、平均分和中位数。代码如下:
```python
# 计算最高分、最低分、平均分和中位数
max_score = max(scores)
min_score = min(scores)
avg_score = sum(scores) / len(scores)
scores.sort()
if len(scores) % 2 == 0:
median_score = (scores[len(scores) // 2 - 1] + scores[len(scores) // 2]) / 2
else:
median_score = scores[len(scores) // 2]
```
接下来,我们可以计算标准方差。代码如下:
```python
# 计算标准方差
variance = sum([(score - avg_score) ** 2 for score in scores]) / len(scores)
std_dev = math.sqrt(variance)
```
接下来,我们可以计算每个分数阶段的人数占比。假设 A 级的分数为 90 分及以上,B 级的分数为 80 分至 89 分,C 级的分数为 70 分至 79 分,D 级的分数为 60 分至 69 分,E 级的分数为 60 分以下。代码如下:
```python
# 计算每个分数阶段的人数占比
a_count = len([score for score in scores if score >= 90])
b_count = len([score for score in scores if score >= 80 and score < 90])
c_count = len([score for score in scores if score >= 70 and score < 80])
d_count = len([score for score in scores if score >= 60 and score < 70])
e_count = len([score for score in scores if score < 60])
total_count = len(scores)
a_rate = a_count / total_count
b_rate = b_count / total_count
c_rate = c_count / total_count
d_rate = d_count / total_count
e_rate = e_count / total_count
```
最后,我们可以将成绩由高到低排序,绘制成绩分布图,并将结果输出到 out.txt 文件中。代码如下:
```python
# 将成绩由高到低排序并输出到 out.txt 文件中
scores.reverse()
with open('out.txt', 'w') as f:
f.write('最高分:{}\n'.format(max_score))
f.write('最低分:{}\n'.format(min_score))
f.write('平均分:{}\n'.format(avg_score))
f.write('中位数:{}\n'.format(median_score))
f.write('标准方差:{}\n'.format(std_dev))
f.write('A率:{:.2%}\n'.format(a_rate))
f.write('B率:{:.2%}\n'.format(b_rate))
f.write('C率:{:.2%}\n'.format(c_rate))
f.write('D率:{:.2%}\n'.format(d_rate))
f.write('E率:{:.2%}\n'.format(e_rate))
for score in scores:
f.write('{}\n'.format(score))
# 绘制成绩分布图
import matplotlib.pyplot as plt
bins = [0, 60, 70, 80, 90, 100]
labels = ['E', 'D', 'C', 'B', 'A']
plt.hist(scores, bins=bins, edgecolor='black')
plt.xticks(bins, labels)
plt.xlabel('成绩')
plt.ylabel('人数')
plt.title('成绩分布图')
plt.savefig('成绩分布图.png')
```
这样,就完成了对成绩表的处理,并将结果输出到 out.txt 文件中。
阅读全文