欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python 课程成绩分析

程序员文章站 2022-03-10 11:44:19
第一件事当然是生成学生的分数,这里我是自己随机生成的,直接看代码,注释都写得很详细了 1 import random 2 import json 3 4 5 def random_score(sum, bottom, top): 6 ''' 7 :param sum: 生成随机数总数 8 :para ......

Python 课程成绩分析

 

 

 第一件事当然是生成学生的分数,这里我是自己随机生成的,直接看代码,注释都写得很详细了

 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()