前言:
这是帮网友写的作业
技术路线:
1、xlrd从excel读取学生成绩,并存储到列表
2、通过numpy中的mean()函数获得平均值
3、通过lambda表达式对对字典的value进行排序
'''
作业:
平均成绩,并且要统计高于平均成绩的人数,最后要将成绩进行降序排列。
要求:通过函数调用实现。最好各个模块都是用函数实现,主程序部分协调各函数的调用。
输出包括,计算出的平均成绩,高于平均成绩的人数,降序排好的成绩。
version:01
author:金鞍少年
Date:2020-3-20
'''
import xlrd
import numpy as np
import sys
class score_table:
def __init__(self, filepath,Sheet):
self.filepath = filepath
self.Sheet = Sheet
# 获取excel中数据
def read_excel(self):
book = xlrd.open_workbook(self.filepath) # 打开excel表,填写路径
table = book.sheet_by_name(self.Sheet) # 找到sheet页
# 获取总行数,总列数
row_Num = table.nrows
col_Num = table.ncols
grade_table = [] # 成绩表,方便类里面调用
key = table.row_values(0) # 这是第一行数据,作为字典的key值
if row_Num <= 1:
print("没数据")
else:
j = 1
for i in range(row_Num - 1):
students = {} # 学生成绩字典
values = table.row_values(j)
for x in range(col_Num):
# 把key值对应的value赋值给key,每行循环
students[key[x]] = values[x]
j += 1
# 把字典加到列表中
grade_table.append(students)
return grade_table
# 成绩排序显示
def Sort_results(self, table):
print('默认排序:0 升序: 1 降序: 2')
choice = input("请选择 :").strip()
if choice == "1":
tables= sorted(table, key=lambda i: i['成绩'], reverse=True) # 降序显示
print('=====================降序排序====================')
for i in tables:
print(i)
elif choice == "2":
tables =sorted(table, key=lambda i: i['成绩'])
print('=====================升序序排序====================')
for i in tables:
print(i)
elif choice == "0":
print('=====================默认排序====================')
for score in table:
print(score)
else:
print('输入错误')
# 获取平均分
def average_score(self,table):
means = np.mean([i['成绩'] for i in table]) # 获得所有成绩
mean_score = np.mean(means)
return mean_score
# 高于平均成绩人数
def Above_average(self,table,mean_score):
print('================高于平均成绩人数=================')
for i in table:
if i['成绩'] > mean_score:
print(i)
# 低于平均成绩人数
def Below_average(self,table,mean_score):
print('================低于平均成绩人数=================')
for i in table:
if i['成绩'] < mean_score:
print(i)
# 逻辑
def start(self):
table = self.read_excel()
mean_score = self.average_score(table)
self.msg = '''
------- 欢迎进入成绩管理系统 ---------
1:查看学生成绩
2:学生平均成绩
3:高于平均成绩学生
4:低于平均成绩
5:退出
'''
while True:
print(self.msg)
choice = input("请选择 :").strip()
if choice == "1":
self.Sort_results(table)
elif choice == "2":
print('%s名学生的平均成绩为:%s 分' % (len(table), mean_score))
elif choice == "3":
self.Above_average(table, mean_score)
elif choice == "4":
self.Below_average(table, mean_score)
elif choice == "5":
print('退出成功!')
sys.exit()
else:
print('输入错误,重新输入!')
if __name__ == "__main__":
obj = score_table(r'C:\Users\Administrator\Desktop\学生成绩.xlsx','Sheet1')
obj.start()