统计全班成绩

班里有5名同学,现在需要用numpy来统计下这些人在语文、英语、数学中的平均成绩、最小成绩、最大成绩、方差、标准差。然后把这些人的总成绩排序,得出名次进行成绩输出。

代码如下:

#-*-coding:utf-8-*
import numpy as np

# 创建numpy的dtype类型
grade_dtype = np.dtype({
	'names':['name', 'Chinese', 'Math', 'English'],
	'formats':['S32', 'i', 'i', 'i']
	})

# 班里学生的成绩
grade = np.array([
	('zhangfei', 68, 65, 30),
	('liubei', 95, 76, 98),
	('liubei', 98, 86, 88),
	('dianwei', 90, 88, 77),
	('xuchu', 80, 90, 90)], dtype=grade_dtype)

chineses = grade['Chinese']     # 语文成绩一个列表
maths = grade['Math']           # 数学成绩一个列表
englishs = grade['English']     # 英语成绩一个列表

# 求各个科目最大最小成绩索引
index1 = np.argmin(chineses)
index2 = np.argmin(maths)
index3 = np.argmin(englishs)
index4 = np.argmax(chineses)
index5 = np.argmax(maths)
index6 = np.argmax(englishs)

print('平均成绩:')
print('语文:{:.2f}, 数学:{:.2f}, 英语:{:.2f}'.format(np.mean(chineses), 
	np.mean(maths), np.mean(englishs)))

print('\n最小成绩:')
print('语文:{}, {}'.format(grade[index1]['Chinese'], grade[index1]['name'].decode('utf-8')))
print('数学:{}, {}'.format(grade[index2]['Math'], grade[index2]['name'].decode('utf-8')))
print('英语:{}, {}'.format(grade[index3]['English'], grade[index3]['name'].decode('utf-8')))

print('\n最大成绩:')
print('语文:{}, {}'.format(grade[index4]['Chinese'], grade[index4]['name'].decode('utf-8')))
print('数学:{}, {}'.format(grade[index5]['Math'], grade[index5]['name'].decode('utf-8')))
print('英语:{}, {}'.format(grade[index6]['English'], grade[index6]['name'].decode('utf-8')))

print('\n方差:')
print('语文:{:.2f}, 数学:{:.2f}, 英语:{:.2f}'.format(np.var(chineses), 
	np.var(maths), np.var(englishs)))

print('\n标准差')
print('语文:{:.2f}, 数学:{:.2f}, 英语:{:.2f}'.format(np.std(chineses), 
	np.std(maths), np.std(englishs)))

# 创建另外一个字典用于存放每个人的总成绩
total = {}
for i in range(len(grade)):
	total[grade[i][0]] = grade[i][1] + grade[i][2] + grade[i][3]

# 对总成绩排序,名字也随之排序
total = sorted(total.items(), key = lambda x: x[1], reverse = True)

print('\n总成绩排序:')
for i in range(len(total)):
	print("第{}名: {}\t总成绩: {}".format(i+1, total[i][0].decode('utf-8'), total[i][1]))

输出结果如下:

平均成绩:
语文:86.20, 数学:81.00, 英语:76.60

最小成绩:
语文:68, zhangfei
数学:65, zhangfei
英语:30, zhangfei

最大成绩:
语文:98, liubei
数学:90, xuchu
英语:98, liubei

方差:
语文:120.16, 数学:87.20, 英语:587.84

标准差
语文:10.96, 数学:9.34, 英语:24.25

总成绩排序:
第1名: liubei	总成绩: 272
第2名: xuchu	总成绩: 260
第3名: dianwei	总成绩: 255
第4名: zhangfei	总成绩: 163

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值