江勇
摘要:本文介绍了Python作业自评系统的对拍运行和代码检测等模块的设计思路和核心代码,并就教学应用提出重要提示:程序教学的课堂重心仍是知识内容的教学设计和程序思想的启发,契合学习内容的课堂案例和激情扬趣的项目作业才能相辅相成,借助或开发一些必要的评测工具能有效地提升学生学习的积极性和主动性。
关键词:Python程序教学;作业评价
中图分类号:G434 文献标识码:A 论文编号:1674-2117(2022)13-0076-03
随着Python被作为高中信息技术“数据与计算”模块的首选教学语言,指导学生学习Python基础语法、编写调试程序代码、领会计算机编程思想成为高中信息技术课程中的一个重要内容。如何在课堂教学中及时发现学生的知识缺漏和指导学生完成Python作业,顺利体验编程过程和发展计算思维,是广大信息技术教师一直思考的问题。笔者在教学实践中,尝试开发了一套Python作业的自评检测系统,能对学生作业进行自我评测,并针对具体错误即时给出修改建议,帮助学生及时查漏补缺,完成程序代码的编写运行。本自评系统经一个学期的教学使用,取得了很好的教学效果。下面,笔者详细谈谈本系统的开发思想和主要过程,以及在教学中的实践应用。
● 系统的主要功能
①采用对拍模式,使用测试数据运行学生作业代码和教师标准程序,对比输出结果,检测学生作业的程序功能。如果输出结果一致,则在作业代码填空项分值的基础上奖励20分。
②若输出有错,则检测作业代码,反馈代码中的语句或语法错误,并提供修改建议。
③将学生作业的评价得分和作答情况上传,记录到教师机服务器的数据库中,供教师教学参考。
④基于学生作业的作答情况,给出相应的激励性评价。
⑤提供针对每一份作业完成情况的查询反馈子系统,教师和学生都可以查看,不仅对学生起到督促作用,还可为教师提供教学反馈,便于安排下一节课的针对性讲解。
● 程序的主要设计思想
每一份项目作业都是教师事先准备好的数据包,主要含有如图1所示的文件。以一份“判断成绩是否合格”的分支结构程序作业为例,主要包含教师的标准程序“成绩合格.exe”,学生需完成的作业半成品“成绩合格.py”、对拍用的测试数据“测试数据.txt”、由代码填空项“标准答案.txt”加密生成的“测评参数.pay”,以及评分程序“测评上传.py”。
学生学习了本节课主要知识点后,自主编辑教师提供的半成品或全空的Python作业,保存之后调试运行。无论成功与否,都可运行本文件夹下的“测评上传.py”程序,本测评软件会自动调用测试数据,经教师程序“成绩合格.exe”和学生代码“成绩合格.py”运行输出,比对输出结果是否一致,判断程序是否通过,给出运行通过并奖励加分的激励评价或提供错误代码的修改建议,供学生参考,进而帮助学生理解本节教学的主体内容和语句语法知识。
● 核心代码的简要说明
1.Python对拍模块
因为os.system()调用执行Python程序会闪现cmd黑窗口,或不能传递测试数据,故笔者探索使用subprocess.run()方法无痕迹地调用执行Python程序。核心代码如图2所示。
2.代码检测模块
由“测评参数.pay”解密还原为“标准答案”读入到列表data中,因为代码的书写形式可能不唯一,故“标准答案.txt”中每空的可能代码用“#”隔开,罗列在一行中。判断时用逻辑运算符“or”组装查询条件,如果在学生作业代码全文中,查询到任一答案,则认为检测项正确,否则提供修改建议。核心代码如图3所示。
3.作答数据上传模块
采用“网上邻居”共享文件夹读写的简化方式,将學生作答数据上传写入教师机的access数据库中。这里用了一个小技巧,在设置共享文件夹名称时,多输入一个“$”,可具有部分隐藏效果。核心代码如下页图4所示。
4.作业情况查询反馈模块
利用aspx动态网页等查询access数据库,因为涉及网站的开发和设置等,步骤较多,这里就不一一赘述了,读者可自行研究。其实,教师此时完全可以在access中使用“筛选”功能查阅每班的每份作业了。
● 课堂教学中的实践应用
本系统为Python作业学生自评检测系统,仅具有检查辅导激励学生作业实践功能。教师在使用中,仍需将教学重心放在教学内容设计、知识流程讲授、程序思想启发上。优秀的课堂案例讲解,结合激情扬趣的项目作业才能相辅相成,从而最大化地发挥课堂教学的价值。所以,针对本系统的使用,设计活泼有趣的课堂作业是另一个耗时更多、更能体现教师匠心的重要组成部分,优质的课堂作业设计才是本系统发挥良好指导检测效果的关键。
教师基于课堂教学内容,选择合适的作业主题后,先进行标准代码的编写调试,总结预估学生可能出现的问题或错误,基于本节教学的测试点,将重点测试部分留空待填,并以代码注释的方式标注明确的语句功能和要求,指导学生作答。将每空的填空项答案(含其他可能的主要书写形式)分行编写“标准答案.txt”,之后加密为“测评参数.pay”,用于向学生提供正确代码提示。按需要分行编写“测试数据.txt”,其中第一行数据为本作业项目的填空数,用于计算反馈学生程序对拍通过之后的计分和奖励,为更好地激发学生积极调试代码,保证程序正常运行,可以提高奖励分数,诱导学生积极尝试,使其达到对程序代码和语法规则的真正理解和掌握。最后,教师将标准代码编译生成exe文件,随项目下发给学生,用于对拍比对。
在程序初学阶段,为降低学习难度,提高学生的学习成就感,教师可以更多地以作业半成品的方式提供项目作业,达到对核心语句的检查练习效果。随着学习进程的深入,教师要预留完整的一条或多条语句让学生编写,真正锻炼学生的算法设计、代码编写、调试能力。因为对程序的效能检测采用对拍的原理,所以学生作业代码中的输入输出部分,教师需事先提供,保证输入输出的一致。如果作业内容是对输入输出语句的学习,则可以在“测评上传.py”中稍加修改,放弃对拍部分的运行,直接执行代码检测部分。
● 结语
教学中的过程监测一直是学科教学中的薄弱环节,借助或开发一些能切实提高学生作业检测和指导效能的工具,将使教学效果事半功倍。它不仅将教师从繁重的作业指导中解放出来,同时还能为不同层次的学生提供不同的成就体验,让他们学有余力的时候,不断地发挥创造,学有不力的时候,有最基础的辅导支持。学习的难度下降了,探索的热情提升了,学习的兴趣就激发了,主动学习就开始了。