标题 | 基于Python的程序评分软件的设计与实现 |
范文 | 摘要:随着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年江苏省基础教育前瞻性教学改革实验项目“设计与智造:统整理念下高中生学习方式的变革”阶段性成果。 |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。