这学期我们每个人需要填写三张学年鉴定表,每一张表中都有学业总平均分和考试课平均分两项内容,如果想用手工的方式算出这两项内容不知道要花多久,所以我建议编写一个算法(Excel 的函数啥的本质上也是算法)计算这两项内容,下面我就以我的成绩为例讲一下用 Python 算出这两项内容的步骤。

概述

我们打开学校的教务系统,如图所示。

点击成绩查询,如图所示。

随后选择某一学年,然后点击按学年查询,如图所示。

我们可以发现这里只有成绩,没有考核方式,而且里面有非法数据,比如所谓的“合格”。我们暂时先不处理这些非法数据,先找到考核方式在哪里,如图所示。

点击培养计划,如图所示。

这样就可以看到考核方式了,然后把建议修读学期改成全部,其他不变,如图所示。

可以发现它默认是分页显示,每页显示 10 条数据,然而我们需要一页显示所有数据。我这边总共 59 条数据,每页显示 10 条数据,那么我们直接把每页显示的数据条数改成大于等于 59 不就可以了吗?在这里我改成 60,如图所示。

既然数据找到了,那么算法实现起来就简单了,根据课程代码(如果课程名称唯一,也可以根据课程名称,我是根据课程名称进行合并的)把每一学年的成绩和考核方式合并到一张表中。

新建项目

我们用 PyCharm 新建一个 Scientific 项目,项目名称和目录随便(因为是对成绩进行分类汇总,所以我就把项目叫做 GradeSummary),如图所示。

点击 CREATE,等待片刻后如图所示。

接下来在 data 目录里面新建两个 Excel 文件,名称如图所示。

然后打开名为成绩统计.xlsx,在里面创建三个 sheet,如图所示。

接着去教务系统成绩查询页,把第一学年的成绩数据放到第一个 sheet,第二学年的放到第二个 sheet,第三学年的放到第三个 sheet,如图所示。

如果和上图的格式差不多就可以保存关闭,打开考核方式统计.xlsx,去教务系统把考核方式数据复制到这个 workbook 的第一张工作表中,如图所示。

如果格式和上图格式差不多就可以保存关闭了。

算法实现

算法的实现过程比较简单,分为以下几步:载入成绩,载入考核方式,合并,处理,计算总平均分,计算考试科平均分。(过程的顺序不唯一,比如载入成绩和载入考核方式可以互换)。

下面就可以搭建一个框架了,代码如下:

class 

01

初始化

在其中我们需要三个数据集列表,一个是存放成绩数据,一个是存放考核方式数据,还有一个是存放合并后的数据。每个列表中有三个元素(第几个元素就对应第几学年)。另外我们还需要一个学年的序列,因为要算每一学年的学业总平均分和考试课平均分。知道这些写出构造方法就是轻而易举了,代码如下:

def 

02

载入成绩

载入成绩的实现很简单,读取成绩统计.xlsx,顺序遍历三个 sheet,在第一次遍历过程中把课程名称的数据放到 self.dataset_list1[0]['课程名称']里面,第二次遍历过程中把课程名称的数据放到 self.dataset_list1[1]['课程名称']里面,以此类推。

在每次遍历的过程中仅仅载入一个课程名称有点说不过去,我们还需要把成绩载入一下,成绩就是考试成绩,补考成绩,重修成绩三个中取最大值。在这里要处理的问题有点多,下面我们来一一解决一下。

第一个问题,如果成绩,补考成绩,重修成绩对应的数据类型不一样,比如我,没有补考和重修,补考成绩和重修成绩对应的数据类型是字符串,怎么办?这个问题解决起来很简单,只要把补考成绩和重修成绩修改成 0 就行了,这样就可以进行比较,而且结果没有错误。

第二个问题,像“合格”这样的数据怎么办?最终我们是选择忽略掉这种数据,但是我们现在不忽略,直接令成绩为空字符串。

知道了这些代码实现就简单了,代码如下:

def 

03

载入考核方式

载入考核方式的实现很简单,读取考核方式统计.xlsx,获取课程名称,考核方式,建议修读学期这三条数据,然后根据建议修读学期计算对应的学年,最后根据学年计算出索引,下面我就讲一下如何计算。

如果建议修读学期是 1 或者 2,那么对应第 1 学年;如果建议修读学期是 3 或者 4,那么对应第 2 学年;以此类推。我们可以发现:(建议修读学期[i]-1)//2+1 就是第几学年,所以索引 = (建议修读学期[i]-1)//2+1-1 = (建议修读学期[i]-1)//2。因为我总共只有 3 个学年,所以索引必须小于等于 2!

最后把数据存放到对应的容器中就行了,代码如下:

def 

04

合并

合并的实现很简单,把成绩数据集列表(self.dataset_list1)中第 i 个数据集和考核方式数据集列表(self.dataset_list2)中第 i 个数据集按照课程名称合并到 self.dataset_list[i] 中,其中 0 <= i <= 2。合并完成之后删除成绩数据集列表和考核方式数据集列表,代码如下:

def 

05

处理

处理的实现很简单,如果成绩是数,保留该数据。在这里我使用一个临时的数据集列表保留筛选后的数据,最后把临时的数据集列表赋值给 self.dataset_list,代码如下:

def 

06

计算总平均分

计算总平均分很简单,课程成绩总和除以课程数目,不要忘了一学年一学年的计算,代码如下:

def 

07

计算考试科平均分

最后是计算考试课平均分,也就是在学业总平均分的基础上多了一步筛选操作——筛选出考试课,代码如下:

def 

最后我直接给出完整代码:

from 

运行结果如图所示。

python里面Dataset干嘛的_用 Python 对成绩分类汇总!相关推荐

  1. python中的成员运算符是干嘛的_在Python中使用成员运算符的示例

    下表列出了所有Python语言支持的成员运算符. 例如: 试试下面的例子就明白了所有的Python编程语言提供会员运算符: #!/usr/bin/python a = 10 b = 20 list = ...

  2. python发行版是什么意思_致 Python 初学者

    当下是一个喧嚣.浮躁的时代.我们总是被生活中大量涌现的热点所吸引,几乎没有深度阅读和思考的时间和机会.我始终认为,学习是需要沉下心来慢慢钻研的,是长期的:同时,学习不应该被赋予太多的功利色彩.一个Py ...

  3. python中numpy数组的合并_基于Python中numpy数组的合并实例讲解

    基于Python中numpy数组的合并实例讲解 Python中numpy数组的合并有很多方法,如 - np.append() - np.concatenate() - np.stack() - np. ...

  4. python版植物大战僵尸源码_基于python的植物大战僵尸游戏设计与实现.docx

    湖南理工学院毕业设计(论文) PAGE PAGE 1 学 号 毕业设计(论文) 题目:基于python的植物大战僵尸游戏设计与实现 作 者 届 别 届 院 别 信息与通信工程学院 专 业 信息工程 指 ...

  5. python学什么方向就业好_学习python就业方向都有哪些?

    谢邀 我在学习的过程中,深深的觉得对于成人或者进入职场的人来说,学习一门新的知识,目的不在于积累,而在于解决问题. 所以这就要求我想明白3个问题: 1).学习python,要解决什么问题? 2).要学 ...

  6. python分析股票数据的项目_用Python分析股市指数

    專 欄 ❈本文作者:王勇,目前感兴趣项目商业分析.Python.机器学习.Kaggle.17年项目管理,通信业干了11年项目经理管合同交付,制造业干了6年项目管理:PMO,变革,生产转移,清算和资产处 ...

  7. 下列python语句的输出结果是_下列Python语句的输出结果是_______________。

    [判断题]All arguments have a conclusion. (10.0分) [单选题]在关于学校萌芽的传说中,有一种学校的名称是"庠",这个场所是( ) [单选题] ...

  8. python语言下划线怎么打_初学Python语言者必须理解的下划线

    下划线(_)在Python语言中有特殊作用. 在大多数编程语言中,下划线是命名变量或者函数名称时的连字符,但是,在Python语言中,不仅如此.如果你是一名Python程序员,对于诸如 _ in ra ...

  9. 一个完整的python文件即是一个模块_用python玩转数据|基本语法

    比较运算符 >>>3<4<7 True >>>3<4<1 False >>> 打开文件 >>> f=op ...

  10. python处理视频动漫化_用Python实现抖音上的“人像动漫化”特效,原来这么简单...

    原标题:用Python实现抖音上的"人像动漫化"特效,原来这么简单 作者 | 黄伟呢 来源 | 数据分析与统计学之美 前几天,女友拉着我和她玩儿抖音,就是这个 人像动漫化的操作,顿 ...

最新文章

  1. cpu,内存,虚拟内存,硬盘,缓存之间是什么关系??
  2. 科普:BCH能够买什么?如何使用BCH买东西?
  3. js html保存json,如何在json文件中存储jQuery或javascript变量?
  4. select for update
  5. http预请求options
  6. Winmail邮件服务器
  7. C指针原理(19)-C指针基础
  8. filter IE滤镜(Internet Explorer)CSS
  9. 技术解析+代码实战,带你入门华为云政务区块链平台
  10. [转载] python字符串_一文详解Python字符串条件判断方法
  11. 403 常见原因 java_科普 httpClient 403 Forbidden (JAVA方向分析)
  12. PHP开源软件《个人管理系统》-希望大家一起来开发
  13. ASP.NET理论知识及面试题
  14. VHDL计算机硬件能直接执行吗,第5章 VHDL程序结构.ppt
  15. 多功能科学计算机.,科学计算器多功能版
  16. 任正非《以客户为中心》
  17. OpenStack 对接 Ceph
  18. android-手势密码
  19. Java面向对象(类的无参和带参)
  20. ucos-ii操作系统

热门文章

  1. VS2005 My.Computer.Registry 对象 操作注册表 简单示例
  2. 根据开始日期和结束日期获取基金的当天净值,并计算收益率
  3. 6.Prometheus 监控技术与实践 --- 告警处理
  4. 11.Kong入门与实战 基于Nginx和OpenResty的云原生微服务网关 --- 自定义插件
  5. 42.Linux/Unix 系统编程手册(下) -- 共享库高级特性
  6. 4. ubuntu php composer
  7. 10.iterm 2 install rz , sz
  8. J2EE中使用jstl报http //java sun com/jsp/jstl/core cannot be reso
  9. linux 一次对一个用户限制存取
  10. pta 编程题10 Root of AVL Tree