题目描述
某班有10名学生的5门课程成绩。首先系统随机生成10名学生的姓名(要求有一个是自己的姓名);
然后要求用户输入5门课的名称(不得为英文),系统随机生成所有学生成绩(0-100范围内);
然后系统以表格形式将所有学生成绩写入文件“你的姓名学号_score.csv”。
然后读入该表格,统计每个学生课程的总分、平均分,并添加到文件中表格的后续列中。
将总分排名前三的学生的各科成绩打印输出到屏幕上;
然后统计每门课程的最高分、最低分、中位数分、平均分,并绘制统计图形,展示这几类成绩分布。
案例源码
以下是一个解决这个问题的Python代码示例。在这个示例中,我们使用了pandas
库来处理表格数据,numpy
库来进行数值计算,matplotlib
库来绘制图形。
import pandas as pd
import numpy as np
import random
import string
import matplotlib.pyplot as plt
# 随机生成学生姓名
student_names = ['张三', '李四', '王五', '赵六', '钱七', '孙八', '周九', '吴十', '郑十一', '你的姓名']
random.shuffle(student_names)
# 用户输入5门课程名称
course_names = [input(f"请输入第{i+1}门课程的名称:") for i in range(5)]
# 随机生成学生成绩
grades_data = np.random.randint(0, 101, size=(10, 5))
grades_df = pd.DataFrame(data=grades_data, columns=course_names, index=student_names)
# 写入文件
file_name = f"{student_names[-1]}_score.csv"
grades_df.to_csv(file_name)
# 读取文件并添加总分、平均分列
grades_df = pd.read_csv(file_name, index_col=0)
grades_df['总分'] = grades_df.sum(axis=1)
grades_df['平均分'] = grades_df.mean(axis=1)
# 打印总分排名前三的学生各科成绩
top_students = grades_df.nlargest(3, '总分')
print(top_students)
# 统计每门课程的最高分、最低分、中位数分、平均分并绘制图形
course_stats = grades_df.describe().loc[['min', 'max', '50%', 'mean']]
course_stats.plot(kind='bar', figsize=(10, 6))
plt.title('课程成绩统计')
plt.ylabel('分数')
plt.show()
这段代码首先随机生成学生姓名,并要求用户输入5门课程名称。然后随机生成10名学生的成绩并写入CSV文件中。接着读取文件,并添加总分和平均分列,并打印总分排名前三的学生各科成绩。最后统计每门课程的最高分、最低分、中位数分、平均分,并绘制成绩统计图形。
© 版权声明
本站资源来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!
THE END