操作excel获得学生考试成绩,计算平均成绩,并对其排序

前言:

这是帮网友写的作业

技术路线:

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

excel格式

操作excel获得学生考试成绩,计算平均成绩,并对其排序_第1张图片

你可能感兴趣的:(python基础)