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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM