zoukankan      html  css  js  c++  java
  • 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()
    
    
    
     
  • 相关阅读:
    .net core ELK
    mongodb基础
    .net core FluentValidation
    使用Identity Server 4建立Authorization Server
    .net core JWT应用
    .net core action过滤器的普通应用
    matplotlib
    python-13:文件操作 之二
    python-13:文件操作 open
    python-12:内置 函数之一 filter map sorted reduce
  • 原文地址:https://www.cnblogs.com/misaki-workshop/p/12590382.html
Copyright © 2011-2022 走看看