技术与应用
*********************
基于Python的程序评分软件的
设计与实现
王晓华  江苏省无锡市第一中学
Python简单易学,功能强大,相比其他语言更容易上手。2020年9月,江苏省正式开始使用高中信息技术新教材,采用的编程语言是Python。学生在学习编程的过程中,写了很多的Python程序需要批改。另外,即使是解决同一个问题,学生的程序也是五花八门,各有特。因此,对于教师来说,逐个手工批改程序作业,费时费力。
Python在文本处理、自动化办公等方面有着很大的优势,用很短的代码便可实现一些烦琐工作的自动化处理。因此,本文采用黑箱测试法来评价学生的程序。
● 问题描述
现有若干班级的Python程序等待批改(如图1),每名学生都有一个以学号命名的文件夹,程序文件名都是统一的,所有学生的文件夹都在student目录中。要求批改
每名学生的程序,给出评分、程序
运行时间以及错误提示信息,形成
电子表格。
● 准备工作
学校机房里的计算机都装有
Thonny3.2.7,自带Python3.7.7。
Thonny的界面简洁明了,适合初学
者。系统中安装了常见的第三方库,
为了将结果写入电子表格,还安装
了openpyxl库。
● 软件的设计分析
本软件的输入信息为学生的
Python程序,输出信息为程序评分
的结果,包括得分、程序运行时间、
程序错误信息。
图1
摘要:随着Python越来越受到编程爱好者的青睐,普通高中信息技术教材都采用了Python作为编程语言。但在实际教学过程中,学生编写了很多Python程序,教师如果都进行手工批改,工作量就很大。作者提出使用基于Python的评分软件,可以大大提高教师的工作效率,体现信息技术的优势。
关键词:Python;程序;评分;黑箱测试
中图分类号:G434  文献标识码:A  论文编号:1674-2117(2021)02-0077-03
77
JAN. 2021 NO.02
技术与应用*********************
78
中国信息技术教育
Python自带模块subprocess,
它可以创建一个子进程,并运行一个外部的程序,正好可以用于测试学生程序。
学生程序的输入输出都是通过键盘和显示器,subprocess可以
将输入输出定义到指定的文件,方便实现批量处理。
本软件采用黑箱测试法给学生程序评分。通过比对学生程序的输出和教师程序的输出是否相同,来确定学生程序的得分。
● 软件的主要代码
1.获取配置文件信息
评分软件的文件夹programJudge 和学生文件夹在同一目录。
评分软件的配置文件为programJudge.js,内容如图2所示。
学生程序名应根据实际的要求改为相应的Python程序名。
timeout的值是学生程序最长运行时间,本软件设置为3秒。
clas s的值是若干个班级的编号。
将配置文件读入到字典d中,只需一行代码,如图3所示。
2.获取测试数据
测试数据和教师标准程序所在文件夹:programJudge/学生程序名/。
输入文件为:0.in, 1.in, … 由教师自己手工生成。
标准答案为:0.ans, 1.ans, …由教师程序自动产生。
获取测试数据getNumOfT
estFile()
图2
图4
图5
图6
图7
图3
代码如图4所示。
该函数将根据顺序编号的
输入文件数量返回测试数据数
量,同时,根据教师程序生成标
准答案,函数myCmd在后面会
有说明。
3.新建工作簿
新建工作簿是为了收集学生
程序的评分信息,代码如图5所示。
4.枚举学生文件
枚举学号s t u d I D,如果
studID的前缀和班级一致,处理
技术与应用
*********************
该学号(如上页图6)。其中,n为测
试数据数量。
5.学生文件的评分
根据学号和程序名得到学生
文件studFile,如果studFile不存
在,得分score为-1,如果存在,分
别用n组测试数据测试,如果学生
python新手适合的软件程序的输出文件和标准答案文件
相同,那么k自增1。n组数据测试完
毕,k*100/n即为本程序的得分,如
上页图7所示。
程序执行时间和错误信息要
根据myCmd的返回值而定,代码如
图8所示。
s u b p r o c e s s.r u n执行完
毕后,若是学生程序超时,返回
(0,'Timeout'),若是returncode为0,表示正常结束学生程序,返回(执行时间,’’),否则返回(0,'Error')。一般是学生程序中存在错误,可在文件testOut中获取错误信息,本软件只取错误信息的最后一行写入表格,方便教师了解学生程序中出现的错误种类。
ws为新建的工作簿的活动工作表,ws.append可以将一个元组作为行写入工作表中,最终形成所有学生
程序评分的一张表格,如图9所示。
其中,score为-1表示学生程
序文件不存在;time单位为ms;
error为TimeOut一般是学生程序
出现死循环或者算法没有优化;其
他错误与Thonny中运行Python
程序的错误提示信息是一样的。
● 结论
本文从一线教师的实际
求出发,通过黑箱测试法给学生
程序自动评分,利用P y t ho n的
subprocess模块,获取学生程序执
行的其他信息,如执行时间、错误
提示信息等,最终得到一张学生程
序评分的表格。这样可以让教师及
时掌握学生的学习情况,学生也能
获得及时的反馈,有利于更好地学
习编程。
图8
图9
参考文献:
[1]Python3.7. Using the subprocess Module [OL].2020.
[2]Eric Gazoni,Charlie Clark. openpyxl - A Python library to read/write Excel 2010 xlsx/xlsm files [OL]. 2020.
作者简介:王晓华(1973—),男,江苏无锡人,教育硕士,中学高级,无锡市第一中学信息技术教师。
基金项目:本文是江苏省教育科学“十三五”规划2020年度普教立项课题“基于计算思维的高中生设计与智造项目化实践研究”阶段性成果,课题批准文号:D/2020/02/283;2019年江苏省基础教育前瞻性教学改革实验项目“设计与智造:统整理念下高中生学习方式的变革”阶段性成果。
79
JAN. 2021 NO.02

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。