码迷,mamicode.com
首页 > 编程语言 > 详细

Python 课程成绩分析

时间:2020-03-29 01:15:04      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:and   列表   最小   ott   turn   写文件   write   print   第一个   

技术图片

 

 

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

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

 

 

 

Python 课程成绩分析

标签:and   列表   最小   ott   turn   写文件   write   print   第一个   

原文地址:https://www.cnblogs.com/misaki-workshop/p/12590382.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!