摘要:隨著Python越來越受到編程愛好者的青睞,普通高中信息技術(shù)教材都采用了Python作為編程語言。但在實際教學過程中,學生編寫了很多Python程序,教師如果都進行手工批改,工作量就很大。作者提出使用基于Python的評分軟件,可以大大提高教師的工作效率,體現(xiàn)信息技術(shù)的優(yōu)勢。
關(guān)鍵詞:Python;程序;評分;黑箱測試
中圖分類號:G434 ?文獻標識碼:A ?論文編號:1674-2117(2021)02-0077-03
Python簡單易學,功能強大,相比其他語言更容易上手。2020年9月,江蘇省正式開始使用高中信息技術(shù)新教材,采用的編程語言是Python。學生在學習編程的過程中,寫了很多的Python程序需要批改。另外,即使是解決同一個問題,學生的程序也是五花八門,各有特色。因此,對于教師來說,逐個手工批改程序作業(yè),費時費力。
Python在文本處理、自動化辦公等方面有著很大的優(yōu)勢,用很短的代碼便可實現(xiàn)一些煩瑣工作的自動化處理。因此,本文采用黑箱測試法來評價學生的程序。
● 問題描述
現(xiàn)有若干班級的Python程序等待批改(如圖1),每名學生都有一個以學號命名的文件夾,程序文件名都是統(tǒng)一的,所有學生的文件夾都在student目錄中。要求批改每名學生的程序,給出評分、程序運行時間以及錯誤提示信息,形成電子表格。
● 準備工作
學校機房里的計算機都裝有Thonny3.2.7,自帶Python3.7.7。Thonny的界面簡潔明了,適合初學者。系統(tǒng)中安裝了常見的第三方庫,為了將結(jié)果寫入電子表格,還安裝了openpyxl庫。
● 軟件的設(shè)計分析
本軟件的輸入信息為學生的Python程序,輸出信息為程序評分的結(jié)果,包括得分、程序運行時間、程序錯誤信息。
Python自帶模塊subprocess,它可以創(chuàng)建一個子進程,并運行一個外部的程序,正好可以用于測試學生程序。
學生程序的輸入輸出都是通過鍵盤和顯示器,subprocess可以將輸入輸出定義到指定的文件,方便實現(xiàn)批量處理。
本軟件采用黑箱測試法給學生程序評分。通過比對學生程序的輸出和教師程序的輸出是否相同,來確定學生程序的得分。
● 軟件的主要代碼
1.獲取配置文件信息
評分軟件的文件夾programJudge和學生文件夾在同一目錄。
評分軟件的配置文件為programJudge.js,內(nèi)容如圖2所示。
學生程序名應根據(jù)實際的要求改為相應的Python程序名。
timeout的值是學生程序最長運行時間,本軟件設(shè)置為3秒。
class的值是若干個班級的編號。
將配置文件讀入到字典d中,只需一行代碼,如圖3所示。
2.獲取測試數(shù)據(jù)
測試數(shù)據(jù)和教師標準程序所在文件夾:programJudge/學生程序名/。
輸入文件為:0.in, 1.in, … 由教師自己手工生成。
標準答案為:0.ans, 1.ans, …由教師程序自動產(chǎn)生。
獲取測試數(shù)據(jù)getNumOfTestFile()代碼如圖4所示。
該函數(shù)將根據(jù)順序編號的輸入文件數(shù)量返回測試數(shù)據(jù)數(shù)量,同時,根據(jù)教師程序生成標準答案,函數(shù)myCmd在后面會有說明。
3.新建工作簿
新建工作簿是為了收集學生程序的評分信息,代碼如圖5所示。
4.枚舉學生文件
枚舉學號studID,如果studID的前綴和班級一致,處理該學號(如上頁圖6)。其中,n為測試數(shù)據(jù)數(shù)量。
5.學生文件的評分
根據(jù)學號和程序名得到學生文件studFile,如果studFile不存在,得分score為-1,如果存在,分別用n組測試數(shù)據(jù)測試,如果學生程序的輸出文件和標準答案文件相同,那么k自增1。n組數(shù)據(jù)測試完畢,k*100/n即為本程序的得分,如上頁圖7所示。
程序執(zhí)行時間和錯誤信息要根據(jù)myCmd的返回值而定,代碼如圖8所示。
subprocess.run執(zhí)行完畢后,若是學生程序超時,返回(0,'Timeout'),若是returncode為0,表示正常結(jié)束學生程序,返回(執(zhí)行時間,),否則返回(0,'Error')。一般是學生程序中存在錯誤,可在文件testOut中獲取錯誤信息,本軟件只取錯誤信息的最后一行寫入表格,方便教師了解學生程序中出現(xiàn)的錯誤種類。
ws為新建的工作簿的活動工作表,ws.append可以將一個元組作為行寫入工作表中,最終形成所有學生程序評分的一張表格,如圖9所示。
其中,score為-1表示學生程序文件不存在;time單位為ms;error為TimeOut一般是學生程序出現(xiàn)死循環(huán)或者算法沒有優(yōu)化;其他錯誤與Thonny中運行Python程序的錯誤提示信息是一樣的。
● 結(jié)論
本文從一線教師的實際需求出發(fā),通過黑箱測試法給學生程序自動評分,利用Python的subprocess模塊,獲取學生程序執(zhí)行的其他信息,如執(zhí)行時間、錯誤提示信息等,最終得到一張學生程序評分的表格。這樣可以讓教師及時掌握學生的學習情況,學生也能獲得及時的反饋,有利于更好地學習編程。
參考文獻:
[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—),男,江蘇無錫人,教育碩士,中學高級,無錫市第一中學信息技術(shù)教師。
基金項目:本文是江蘇省教育科學“十三五”規(guī)劃2020年度普教立項課題“基于計算思維的高中生設(shè)計與智造項目化實踐研究”階段性成果,課題批準文號:D/2020/02/283;2019年江蘇省基礎(chǔ)教育前瞻性教學改革實驗項目“設(shè)計與智造:統(tǒng)整理念下高中生學習方式的變革”階段性成果。