00问题提出


2020年,由于新冠疫情(Coronavirus-19)的影响, 2020年春季学期各班信号与系统期末考试 采用了网络考试的方式,同学将试卷上载的清华网络学堂之后。然后在统一下载。

信号与系统试卷 总共有八道试题,总分100分,考试过程进行了两小时15分钟。

批改试卷的过程就是通过阅读上载的电子文档,然后将八道题的题目给出分数,然后登录到学生成绩EXCEL中。随着批改试卷过程,判定分数的过程会越来熟练,但是将分数登录到EXCEL格过程则会出现一定的困难:

  • 在EXCEL表各种找到对应的学生条目困难
  • 在八个分数格内录入八个数字比较繁琐

下面通过PYTHON命令完成自动程序录入过程,PYTHON 程序完成以下功能:

  • 根据当前WINDOW下各窗口是否包含有学生ID字符串,自动获取当前批改学生的ID;
  • 等待输入八个小题分数;
  • 根据ID,将对应EXCEL表格中学生ID相同的一栏输入八个小题分值。

01信息的前处理


对于学生的信息进行一下处理:
1. 生成学生学号与姓名TEXT文件
具体过程参照: 2020信号与系统课程学生信息转换。

2. 下载学生答案答辩文件并加压缩

将加压缩后的文件进行名称转换。
具体过程参照: 2020信号与系统课程学生信息转换。

▲ 将解压文件进行名称转换

文件名称转换PYTHON程序:

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# FILENAMECHANGE.PY            -- by Dr. ZhuoQing 2020-06-19
#
# Note:
#============================================================from headm import *
from inforsub               import *#------------------------------------------------------------
siau = text2infor(ssau)
sixy = text2infor(ssxy)#------------------------------------------------------------
filedir = tspstring2text('ssxy')
printf(filedir)filedim = os.listdir(filedir)
filenew = [(f.split('_')[0], os.path.splitext(f)[-1]) for f in filedim]fileout = []
changecount = 0
for id,f in enumerate(filenew):name = sixy[f[0]]fo = '%s_%s%s'%(f[0],name,f[1])fold = os.path.join(filedir, filedim[id])fnew = os.path.join(filedir, fo)if os.path.isfile(fold):os.rename(fold, fnew)changecount = changecount + 1printf('Change:%d\a'%changecount)#------------------------------------------------------------
#        END OF FILE : FILENAMECHANGE.PY
#============================================================

3. 创建学生成绩EXCEL文件
这部分根据网络学堂下载所有学生的信息,并生成对应的EXCEL文件。
在EXCEL文件中重新生成一个表单“Exam”:

表单第一行为表头;表单前两列分别是ID和姓名。格式如下:

▲ 记录成绩的EXCEL表单结构

为了能够适应PYTHON对EXCEL处理,EXCEL表格的格式需要通过EXCEL另存为修改成.XLSX的格式。

02自动成绩录入PYTHON程序


1. 功能介绍
在此过程中需要对程序中的前面的变量进行正确的设置:

xyinfor = text2infor(ssxy)
auinfor = text2infor(ssau)
xyexcel = r'D:\Teaching\SignalsSystems\SS2020S\Examination\Excel\SSXY-SCORE.xlsx'
auexcel = r'D:\Teaching\SignalsSystems\SS2020S\Examination\Excel\SSAU-SCORE.xlsx'

这个程序可以自动根据学生ID号在判断对哪一个EXCEL文件进行修改。

在运行程序之前,先打开一个学生答案文件,可以是PDF,WORD,ZIP文件

(1) score (无参数): 显示当前学生的成绩信息
(2) score n1 n2: 对当前学生的第n1道题目的分数修改成n2
(3) score n1 n2 n3 n4 n5 n6 n7 n8 :
将当前评阅学生的八道题目的成绩录入。

2. 程序实现

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# SCORE.PY                     -- by Dr. ZhuoQing 2020-06-19
#
# Note:
#============================================================from head import *
from inforsub               import *#------------------------------------------------------------
xyinfor = text2infor(ssxy)
auinfor = text2infor(ssau)
xyexcel = r'D:\Teaching\SignalsSystems\SS2020S\Examination\Excel\SSXY-SCORE.xlsx'
auexcel = r'D:\Teaching\SignalsSystems\SS2020S\Examination\Excel\SSAU-SCORE.xlsx'if len(xyinfor) == 0:printf("No student infor.\a")exit()
if len(auinfor) == 0:printf("No student infor.\a")exit()if os.path.isfile(xyexcel) == False:printf("No output excel file.%s"%excelfile)exit()if os.path.isfile(auexcel) == False:printf("No output excel file.%s"%excelfile)exit()#------------------------------------------------------------
printf('')#------------------------------------------------------------
idstr = ''
namestr = ''
excelfile = ''
idsamecount = 0title = tspgetwindowtitle()
for t in title:ts = t.split('_')if len(ts) < 2: continueif ts[0] in xyinfor:idstr = ts[0]namestr = xyinfor[idstr]excelfile = xyexcelidsamecount = idsamecount + 1printf('%s_%s:%s\a'%(idstr, namestr, excelfile))
#        breakif ts[0] in auinfor:idstr = ts[0]namestr = auinfor[idstr]excelfile = auexcelidsamecount = idsamecount + 1printf('%s_%s:%s\a'%(idstr, namestr, excelfile))
#        breakif idsamecount != 1:printf("ERROR: idsame count : %d.\a"%idsamecount)exit()#if len(idstr) == 0:
#    printf("ERROR: No find id string.\a")
#    exit()#printf('%s_%s:%s\a'%(idstr, namestr, excelfile))
#------------------------------------------------------------if len(sys.argv) < 3:
#    printf("Usage: score s1 s2 s3....")showexcelcell(excelfile, int(idstr))exit()if len(sys.argv) == 3:scoreid = int(sys.argv[1])score = float(sys.argv[2])if scoreid < 1 or scoreid > 8:printf("Score id ERROR.\a")exit()setexcelcell(excelfile, int(idstr), scoreid, score)printf('\a')exit()#------------------------------------------------------------
if len(sys.argv) != 9:printf("Usage: score s1 s2 ...s8\a")exit()scoredim = []
for s in sys.argv[1:]:scoredim.append(float(s))printf(scoredim)
setexcelcells(excelfile, int(idstr), scoredim)printf('Total:%5.2f\a'%sum(scoredim))#------------------------------------------------------------
#        END OF FILE : SCORE.PY
#============================================================
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# INFORSUB.PY                  -- by Dr. ZhuoQing 2020-06-18
#
# Note:
#============================================================from headm import *
import pandas as pd#------------------------------------------------------------
ssau = 2
ssxy = 3#------------------------------------------------------------
def text2infor(fileid):filename = tspgetdopfile(fileid)
#    printf(filename)studentdict = {}with open(filename, 'r', encoding='gbk') as f:for l in (f.readlines()):l.rstrip('\n')lsect = l.split()if lsect[0] == '学号':continuestudentdict[lsect[0]] = lsect[1]return studentdict#------------------------------------------------------------
def setexcelcell(filename, sid, col, num):excelfile = pd.read_excel(filename, sheet_name='Exam')listdata = excelfile.values.tolist()rowid = -1for id,l in enumerate(listdata):if l[0] == sid:rowid = idprintff(id, listdata[id])breakif rowid < 0:printf("ERROR: Can not find %d in %s.\a"%(sid, filename))returnexcelfile.iat[rowid, col+1] = numlistdata = excelfile.values.tolist()printff(rowid, listdata[rowid], sum(listdata[rowid][2:]))excelfile.to_excel(filename, sheet_name='Exam', index=False)#------------------------------------------------------------
def showexcelcell(filename, sid):excelfile = pd.read_excel(filename, sheet_name='Exam')listdata = excelfile.values.tolist()if sid == 0:for l in listdata:s = '%s %d'%(str(l), sum(l[2:]))ss = s.replace('\'', '')ss = ss.replace('[', '')ss = ss.replace(']', '')ss = ss.replace(',', '')printf(ss)return#--------------------------------------------------------rowid = -1for id,l in enumerate(listdata):if l[0] == sid:rowid = idprintff(id, listdata[id],sum(listdata[id][2:]))breakif rowid < 0:printf("ERROR: Can not find %d in %s.\a"%(sid, filename))return#------------------------------------------------------------
def setexcelcells(filename, sid, num):excelfile = pd.read_excel(filename, sheet_name='Exam')listdata = excelfile.values.tolist()rowid = -1for id,l in enumerate(listdata):if l[0] == sid:rowid = idprintff(id, listdata[id])breakif rowid < 0:printf("ERROR: Can not find %d in %s.\a"%(sid, filename))returnfor id, n in enumerate(num):excelfile.iat[rowid, id+2] = nlistdata = excelfile.values.tolist()printff(rowid, listdata[rowid], sum(listdata[rowid][2:]))excelfile.to_excel(filename, sheet_name='Exam', index=False)#------------------------------------------------------------
if __name__ == "__main__":filename = r'D:\Teaching\SignalsSystems\SS2020S\Examination\Excel\SSXY-SCORE.xlsx'setexcelcell(filename, 2017013661, 1, 10)'''si = text2infor(ssau)printff(len(si), si)si = text2infor(ssxy)printff(len(si), si)'''
#------------------------------------------------------------
#        END OF FILE : INFORSUB.PY
#============================================================

■ 结论


通过该程序,可提高试卷批改的速度,减少成绩录入过程中的错误。

2020年春季信号与系统试卷批改相关推荐

  1. 2020年信号与系统课程批改工作处理程序

    本文集成了相应的处理应用程序,便于之后的参见: 作者:卓晴博士,清华大学自动化系 更新时间:2020-07-26 Sunday 01 BASIC INFORMATION #!/usr/local/bi ...

  2. 南工程信通院—18年信号与系统试卷(有答案与解析)

    文章目录 1.1填空题 1.2填空题 1.3填空题 2.1选择题 2.2选择题 2.3选择题 3.2分析作图题 3.3分析作图题 4.1分析计算题 4.2分析计算题 1.1填空题 1.2填空题 1.3 ...

  3. 2020秋季人工神经网络作业登记与批改

    ➤01 作业批量下载与解压 1.作业下载 在网络学堂上的"课程作业栏",每次作业批阅部分,可以选择将提交的的作业批量下载. ▲ 作业批改界面 ▲ 清华大学学生下载文件 ▲ 深圳研究 ...

  4. 信号与系统奥本海姆pdf_2019上海交通大学819信号系统与信号处理考研初/复试经验...

    初试: 关于信号与系统,这门课非常基础,但是知识点也是非常细致的,复习的时候一定要细心,而且我建议郑君里的书一定要多看几遍,所谓"书读百遍其义自见",多看几遍书之后对你再回头去做题 ...

  5. 信号与系统期末考试2020春季学期试题准备

    00特殊情况说明 在2020年春季学期,由于受到Coronavirus-19的影响,考试采用网络考试的形式: 通过网络学堂分发试卷和收集答案: 考试通过腾讯会议进行监考过程: 考试时间6月13日下午2 ...

  6. 信号与系统2021春季课程小论文批改

    简 介: 本文记录了对于2021年春季信号与系统分析课程的综合小论文的处理和分析的情况. 关键词: 信号与系统,期末成绩,小论文 §01 小论文基本情况 1.小论文要求   1.目标与分数   信号与 ...

  7. 2020春季学期信号与系统课堂参与信息处理

    ■ 简介 这部分信息来自于学生通过公众号TSINGHUAZHUOQING参与信号与系统课程教学活动,部分内容可以参见博文" 上课玩手机 "中的介绍. 由于今年 Coronaviru ...

  8. 2020年春季学期信号与系统课程作业参考答案-第十五次作业

    信号与系统课程第十五次作业参考答案 ※ 第一题 已知x[n],h[n]x\left[ n \right],h\left[ n \right]x[n],h[n]长度分别是10, 25.设:y1[n]=x ...

  9. 2020年春季学期信号与系统课程作业参考答案-第十四次作业

    信号与系统课程第十四次作业参考答案 ※ 第一题 用闭式表达式写出下面有限长序列的离散傅里叶变换(DFT): (1) x[n]=δ[n]x\left[ n \right] = \delta \left[ ...

最新文章

  1. 【入门篇】如何正确使用机器学习中的训练集、验证集和测试集?
  2. 重学ES6 模板字符串
  3. Juice Extractor dp
  4. framebuffer驱动详解4——framebuffer驱动分析2(probe函数讲解)
  5. deepin8、9安装docker并添加用户,解决报错:aptsources.distro.NoDistroTemplateException
  6. Mybatis的直接执行SQL
  7. 孙鑫VC学习笔记:第七讲 对话框
  8. js遍历jstl数组
  9. nrf52840烧录配置(协议栈+APP)
  10. ubuntu安装与卸载deb文件
  11. 计算机进入休眠状态如何唤醒,电脑进入睡眠状态怎么快速唤醒图文教程
  12. 修改自己电脑连接的路由器的配置网址192.168.1.1
  13. 多张连续帧图片转为视频,万能转换工具!(Ubuntu系统下亲测有效!)
  14. 固态硬盘:掉盘不识别自检修复,30分钟大法
  15. LeetCode 112 路径总和 python3
  16. ShopWind 开源电商系统 V3.4.3 发布,uni-app 商城案例,PC+APP+H5 + 小程序
  17. 数仓:事实表设计方法,原则和三种类型选择
  18. PairProject 总结
  19. 用Python 爬《蜘蛛侠:英雄远征》猫眼评论并分析
  20. matlab绘制世界地图和经纬度的标记

热门文章

  1. JHStatusTextView
  2. Web新动力 ——Ajax
  3. Android Gallery组件详解(转)
  4. ide setting
  5. 多线程编程实战(一)
  6. Android应用开发—TextView的动态创建
  7. Android数据库高手秘籍(三)——使用LitePal升级表
  8. MySQL学习笔记之启动停止与登录,显示相关信息
  9. linux AS 5 DNS 配置中的小错误
  10. AM消息中间件OA、ERP消息提醒的必要工具