Python 课程成绩分析
程序员文章站
2022-06-22 09:19:36
第一件事当然是生成学生的分数,这里我是自己随机生成的,直接看代码,注释都写得很详细了 1 import random 2 import json 3 4 5 def random_score(sum, bottom, top): 6 ''' 7 :param sum: 生成随机数总数 8 :para ......
第一件事当然是生成学生的分数,这里我是自己随机生成的,直接看代码,注释都写得很详细了
1 import random 2 import json 3 4 5 def random_score(sum, bottom, top): 6 ''' 7 :param sum: 生成随机数总数 8 :param bottom: 随机数下界 9 :param top: 随机数上街 10 :return: score_list 随机数列表 11 ''' 12 score_list = [] 13 for i in range(sum): 14 # 用random库的randint生成伪随机整数 15 random_number = random.randint(bottom, top) 16 score_list.append(random_number) 17 18 return score_list 19 20 21 def write_file(filename, tmp_list): 22 ''' 23 :param filename: 写入文件名 24 :param tmp_list: 传入写文件内容 25 :return: 26 ''' 27 with open(filename, 'w') as f: 28 # json.dump()可以用来编码json数据,并写入文件流 29 json.dump(tmp_list, f) 30 31 32 def main(): 33 # 主函数 34 score_list = random_score(40, 50, 100) 35 filename = 'students_score' 36 write_file(filename, score_list) 37 38 39 if __name__ == '__main__': 40 main()
第二步就是各种计算啦,注释写的很全同样不解析了
1 import json 2 import math 3 import numpy 4 5 6 def read_file(filename): 7 """ 8 :param filename: 读取文件名 9 :return: 10 """ 11 12 with open(filename, 'r') as f: 13 # json.load可以将json文件解码成对应的数据类型 14 score_list = json.load(f) 15 return score_list 16 17 18 def cal_score(score_list): 19 """ 20 21 :param score_list: 学生全部分数 22 :return: 23 """ 24 25 # 列表本身就有找到最大最小值的函数 26 max_score = max(score_list) 27 min_score = min(score_list) 28 29 # 用math的fsum()求总和再求平均值,朴实的方法 30 average_score = math.fsum(score_list) / len(score_list) 31 # average_score = numpy.mean(score_list) 也可以,一步到位 32 33 # 偷懒使用了numpy的求中位数的函数,普通方法是找到列表最中间的或中间两位求平均值 34 middle_score = numpy.median(score_list) 35 36 # 这里我用了列表解析的方法来找到每个满足条件的分数 37 fail = [score for score in score_list if score < 60] 38 d_class = [score for score in score_list if 60 <= score < 70] 39 c_class = [score for score in score_list if 70 <= score < 80] 40 b_class = [score for score in score_list if 80 <= score < 90] 41 a_class = [score for score in score_list if 90 <= score < 100] 42 43 # numpy.std()对列表内所有数求标准差 44 standard_deviation = numpy.std(score_list) 45 # 这里标准差位数太长,使用round()控制一下精度,第一个参数为传入长尾数的数,第二个参数为控制小数的精度 46 ctl_st_dev = round(float(standard_deviation), 2) 47 48 print("本次测试分数情况如下:") 49 # format()标准化输出 50 print("平均分:{},最高分:{},最低分:{},成绩中位数:{},成绩标准差:{}(保留两位小数)".format(average_score, 51 max_score, min_score, middle_score, ctl_st_dev)) 52 print("各分数段人数如下:") 53 print("不及格人数:{}人,60-70分之间:{}人,70-80分之间:{}人,80-90分之间:{}人" 54 ",90-100分:{}人".format(fail, len(d_class), len(c_class), len(b_class), len(a_class))) 55 56 57 def main(): 58 score_list = read_file('students_score') 59 cal_score(score_list) 60 61 62 if __name__ == '__main__': 63 main()
上一篇: DSA_01:简介