这学期我们每个人需要填写三张学年鉴定表,每一张表中都有学业总平均分和考试课平均分两项内容,如果想用手工的方式算出这两项内容不知道要花多久,所以我建议编写一个算法(Excel 的函数啥的本质上也是算法)计算这两项内容,下面我就以我的成绩为例讲一下用 Python 算出这两项内容的步骤。
概述
我们打开学校的教务系统,如图所示。
点击成绩查询,如图所示。
随后选择某一学年,然后点击按学年查询,如图所示。
我们可以发现这里只有成绩,没有考核方式,而且里面有非法数据,比如所谓的“合格”。我们暂时先不处理这些非法数据,先找到考核方式在哪里,如图所示。
点击培养计划,如图所示。
这样就可以看到考核方式了,然后把建议修读学期改成全部,其他不变,如图所示。
可以发现它默认是分页显示,每页显示 10 条数据,然而我们需要一页显示所有数据。我这边总共 59 条数据,每页显示 10 条数据,那么我们直接把每页显示的数据条数改成大于等于 59 不就可以了吗?在这里我改成 60,如图所示。
既然数据找到了,那么算法实现起来就简单了,根据课程代码(如果课程名称唯一,也可以根据课程名称,我是根据课程名称进行合并的)把每一学年的成绩和考核方式合并到一张表中。
新建项目
我们用 PyCharm 新建一个 Scientific 项目,项目名称和目录随便(因为是对成绩进行分类汇总,所以我就把项目叫做 GradeSummary),如图所示。
点击 CREATE,等待片刻后如图所示。
接下来在 data 目录里面新建两个 Excel 文件,名称如图所示。
然后打开名为成绩统计.xlsx,在里面创建三个 sheet,如图所示。
接着去教务系统成绩查询页,把第一学年的成绩数据放到第一个 sheet,第二学年的放到第二个 sheet,第三学年的放到第三个 sheet,如图所示。
如果和上图的格式差不多就可以保存关闭,打开考核方式统计.xlsx,去教务系统把考核方式数据复制到这个 workbook 的第一张工作表中,如图所示。
如果格式和上图格式差不多就可以保存关闭了。
算法实现
算法的实现过程比较简单,分为以下几步:载入成绩,载入考核方式,合并,处理,计算总平均分,计算考试科平均分。(过程的顺序不唯一,比如载入成绩和载入考核方式可以互换)。
下面就可以搭建一个框架了,代码如下:
class GradeSummary:
def __init__(self):
pass
def load_grade(self):
pass
def load_assessment_method(self):
pass
def merge(self):
pass
def process(self):
pass
def calculate_all_average(self):
pass
def calculate_examination_average(self):
pass
if __name__ == '__main__':
grade_summary = GradeSummary()
grade_summary.load_grade()
grade_summary.load_assessment_method()
grade_summary.merge()
grade_summary.process()
grade_summary.calculate_all_average()
grade_summary.calculate_examination_average()
01
初始化
在其中我们需要三个数据集列表,一个是存放成绩数据,一个是存放考核方式数据,还有一个是存放合并后的数据。每个列表中有三个元素(第几个元素就对应第几学年)。另外我们还需要一个学年的序列,因为要算每一学年的学业总平均分和考试课平均分。知道这些写出构造方法就是轻而易举了,代码如下:
def __init__(self):
self.dataset_list1 = [{'课程名称': [], '成绩': []}, {'课程名称': [], '成绩': []},