练习题:统计全班的成绩
假设一个团队里有5名学员,成绩如下表所示。你可以用NumPy统计下这些人在语文、英语、数学中的平均成绩、最小成绩、最大成绩、方差、标准差。然后把这些人的总成绩排序,得出名次进行成绩输出。
代码实现:
import numpy as np
persontype=np.dtype({'names':['name','chinese','math','english','total'],'formats':['S32','i','i','i','i']})
students=np.array([('zhangfei',66,65,30,0),('guanyu',95,85,98,0),('zhaoyun',93,92,96,0),('huangzhong',90,88,77,0),('dianwei',80,90,90,0)],dtype=persontype)
Chinese=students[:]['chinese']
Math=students[:]['math']
English=students[:]['english']
print('Chinese_mean=',np.mean(Chinese))
print('Math_mean=',np.mean(Math))
print('English_mean=',np.mean(English))
print('Chinese_min=',np.amin(Chinese))
print('Math_min=',np.amin(Math))
print('English_min=',np.amin(English))
print('Chinese_man=',np.amax(Chinese))
print('Math_man=',np.amax(Math))
print('English_man=',np.amax(English))
print('Chinese_var=',np.var(Chinese))
print('Math_var=',np.var(Math))
print('English_var=',np.var(English))
print('Chinese_std=',np.std(Chinese))
print('Math_std=',np.std(Math))
print('English_std=',np.std(English))
students[:]['total']=Chinese+Math+English
# print(students)
# rank=np.sort(students,order='total') # 在这里,reverse=True属性用不了,只能升序排,所以下面使用sorted列表排序
print('排名:')
rank = sorted(students,key=lambda t:t[4],reverse=True) # 出来是一个列表
for i in rank:
print(i)
np.sort()默认是按照升序排序的,去网上找了一通,发现并没有找到按降序排序的办法,只好使用了python自带的sorted排序,得到的是一个总分降序的列表。如果大家有更好的排序办法,欢迎留言区交流,十分感谢。