基于Python的程序评分软件的设计与实现

2021-04-01 09:08王晓华
中国信息技术教育 2021年2期
关键词:评分程序

摘要:随着Python越来越受到编程爱好者的青睐,普通高中信息技术教材都采用了Python作为编程语言。但在实际教学过程中,学生编写了很多Python程序,教师如果都进行手工批改,工作量就很大。作者提出使用基于Python的评分软件,可以大大提高教师的工作效率,体现信息技术的优势。

关键词:Python;程序;评分;黑箱测试

中图分类号:G434  文献标识码:A  论文编号:1674-2117(2021)02-0077-03

Python简单易学,功能强大,相比其他语言更容易上手。2020年9月,江苏省正式开始使用高中信息技术新教材,采用的编程语言是Python。学生在学习编程的过程中,写了很多的Python程序需要批改。另外,即使是解决同一个问题,学生的程序也是五花八门,各有特色。因此,对于教师来说,逐个手工批改程序作业,费时费力。

Python在文本处理、自动化办公等方面有着很大的优势,用很短的代码便可实现一些烦琐工作的自动化处理。因此,本文采用黑箱测试法来评价学生的程序。

● 问题描述

现有若干班级的Python程序等待批改(如图1),每名学生都有一个以学号命名的文件夹,程序文件名都是统一的,所有学生的文件夹都在student目录中。要求批改每名学生的程序,给出评分、程序运行时间以及错误提示信息,形成电子表格。

● 准备工作

学校机房里的计算机都装有Thonny3.2.7,自带Python3.7.7。Thonny的界面简洁明了,适合初学者。系统中安装了常见的第三方库,为了将结果写入电子表格,还安装了openpyxl库。

● 软件的设计分析

本软件的输入信息为学生的Python程序,输出信息为程序评分的结果,包括得分、程序运行时间、程序错误信息。

Python自带模块subprocess,它可以创建一个子进程,并运行一个外部的程序,正好可以用于测试学生程序。

学生程序的输入输出都是通过键盘和显示器,subprocess可以将输入输出定义到指定的文件,方便实现批量处理。

本软件采用黑箱测试法给学生程序评分。通过比对学生程序的输出和教师程序的输出是否相同,来确定学生程序的得分。

● 软件的主要代码

1.获取配置文件信息

评分软件的文件夹programJudge和学生文件夹在同一目录。

评分软件的配置文件为programJudge.js,内容如图2所示。

学生程序名应根据实际的要求改为相应的Python程序名。

timeout的值是学生程序最长运行时间,本软件设置为3秒。

class的值是若干个班级的编号。

将配置文件读入到字典d中,只需一行代码,如图3所示。

2.获取测试数据

测试数据和教师标准程序所在文件夹:programJudge/学生程序名/。

输入文件为:0.in, 1.in, … 由教师自己手工生成。

标准答案为:0.ans, 1.ans, …由教师程序自动产生。

获取测试数据getNumOfTestFile()代码如图4所示。

该函数将根据顺序编号的输入文件数量返回测试数据数量,同时,根据教师程序生成标准答案,函数myCmd在后面会有说明。

3.新建工作簿

新建工作簿是为了收集学生程序的评分信息,代码如图5所示。

4.枚举学生文件

枚举学号studID,如果studID的前缀和班级一致,处理该学号(如上页图6)。其中,n为测试数据数量。

5.学生文件的评分

根据学号和程序名得到学生文件studFile,如果studFile不存在,得分score为-1,如果存在,分别用n组测试数据测试,如果学生程序的输出文件和标准答案文件相同,那么k自增1。n组数据测试完毕,k*100/n即为本程序的得分,如上页图7所示。

程序执行时间和错误信息要根据myCmd的返回值而定,代码如图8所示。

subprocess.run执行完毕后,若是学生程序超时,返回(0,'Timeout'),若是returncode为0,表示正常结束学生程序,返回(执行时间,),否则返回(0,'Error')。一般是学生程序中存在错误,可在文件testOut中获取错误信息,本软件只取错误信息的最后一行写入表格,方便教师了解学生程序中出现的错误种类。

ws为新建的工作簿的活动工作表,ws.append可以将一个元组作为行写入工作表中,最终形成所有学生程序评分的一张表格,如图9所示。

其中,score为-1表示学生程序文件不存在;time单位为ms;error为TimeOut一般是学生程序出现死循环或者算法没有优化;其他错误与Thonny中运行Python程序的错误提示信息是一样的。

● 结论

本文从一线教师的实际需求出发,通过黑箱测试法给学生程序自动评分,利用Python的subprocess模块,获取学生程序执行的其他信息,如执行时间、错误提示信息等,最终得到一张学生程序评分的表格。这样可以让教师及时掌握学生的学习情况,学生也能获得及时的反馈,有利于更好地学习编程。

参考文献:

[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年江苏省基础教育前瞻性教学改革实验项目“设计与智造:统整理念下高中生学习方式的变革”阶段性成果。

猜你喜欢
评分程序
APACHEⅡ评分在制定ICU患者护理干预措施中的应用研究
给Windows添加程序快速切换栏
简化化学平衡移动教学程序探索
双周最佳阵容
双周最佳阵容
“程序猿”的生活什么样
英国与欧盟正式启动“离婚”程序程序
双周最佳阵容