王鵬
● 特色與亮點
①前端預(yù)處理技術(shù),使得該平臺支持input輸入函數(shù),能更好地體現(xiàn)交互式編程的特點;前端二次解析技術(shù),使得該平臺支持time模塊下的sleep函數(shù),能更好地體現(xiàn)程序運行過程;前端預(yù)處理技術(shù)和前端二次解析技術(shù)屬于前端的技術(shù)處理范疇,均不會給服務(wù)器造成負擔,保證了系統(tǒng)的穩(wěn)定和安全。
②對于錯誤提示可以進行實時的中英文對照輸出,讓學生更快、更容易地發(fā)現(xiàn)錯誤,解決問題。
③對于語法高亮的支持,讓學生更容易掌握語法中的關(guān)鍵字。
④研發(fā)的與該平臺配套的課程,內(nèi)容貼合本地區(qū)初中生的認知水平。
⑤自主研發(fā)的課程后臺管理系統(tǒng),讓教師可以自定義課程內(nèi)容,適應(yīng)個性化的教學,便于后期平臺的推廣和使用。
⑥使用該學習平臺,學生或教師不需要安裝任何軟件或者插件,只要計算機能上網(wǎng),打開瀏覽器就可以使用。如果將該平臺部署到公網(wǎng)上,學生在家中就可以使用該平臺進行Python知識的學習。當然,若將該平臺部署到學校內(nèi)部的服務(wù)器上,學生在校內(nèi)只需要訪問局域網(wǎng)便可使用。
● 制作背景
近年來,編程語言Python已經(jīng)進入了浙江、山東、北京等地的高中以及中小學信息技術(shù)教材。通過Python語言的學習,可以培養(yǎng)學生的邏輯思維能力和創(chuàng)造力,可以及早發(fā)現(xiàn)以及選拔出在編程方面有特長的學生,為國家儲備人工智能方面的人才??梢灶A(yù)見,Python語言在當下乃至未來很長一段時間將成為信息技術(shù)學科中的熱點與重點模塊。
通過搜索,筆者檢索到一些關(guān)于Python的編程平臺,但這些平臺大多沒有配套的Python課程,僅僅提供了Python實驗環(huán)境,雖然也有極少數(shù)的Python編程平臺提供了相應(yīng)的Python課程,但課程內(nèi)容大多只是一些代碼示例,并不貼合初中的信息技術(shù)教學。而且,這些平臺大多是不開源的,尤其是后臺管理系統(tǒng),對外是封閉的。教師無法使用它的后臺管理系統(tǒng)上傳自己開發(fā)的個性化課程,無法真正應(yīng)將其用于日常教學中。筆者經(jīng)過實際檢驗發(fā)現(xiàn),這些Python實驗環(huán)境或者編程平臺都不能很好地支持input和sleep這兩個函數(shù)。
針對以上問題,設(shè)計制作一個交互式的Python編程平臺并且以初中信息技術(shù)教材為藍本開發(fā)配套的Python校本課程,是很有必要的。筆者設(shè)計的這一平臺具有完全的自主知識產(chǎn)權(quán)并且是公益性的。在教育領(lǐng)域里,廣大信息技術(shù)教師可以自由、免費、個性化地使用這個平臺。該平臺為中小學生學習Python提供了一種有效的途徑。
● 設(shè)計思路及內(nèi)容結(jié)構(gòu)
該系統(tǒng)采用了B/S架構(gòu)方式。用戶在瀏覽器的網(wǎng)頁中輸入Python代碼,點擊“運行”按鈕后,代碼被發(fā)送到服務(wù)器。在服務(wù)器端,通過subProcess這個API將代碼傳輸給Python解釋器,并且接收返回結(jié)果。subProcess可以通過子進程來執(zhí)行外部指令,并通過input/output/error管道,獲取子進程執(zhí)行的返回信息。最后,由服務(wù)器將返回結(jié)果發(fā)送給瀏覽器,瀏覽器負責解析并呈現(xiàn)結(jié)果。
系統(tǒng)總體上分為前端和后臺兩部分。前端主要負責展示課程、提供交互式編程環(huán)境以及呈現(xiàn)代碼運行結(jié)果。后臺又細分為兩個模塊:專門負責代碼解析、執(zhí)行、反饋運算結(jié)果的“代碼處理模塊”以及專門負責課程“增刪改查”等操作的“課程管理模塊”。其中,系統(tǒng)的前端界面包含四個區(qū)域,如圖1所示。當用戶把鼠標移動到圖1所示界面最左端時,會彈出課程列表(如圖2)。當用戶單擊某一章的標題時會展開本章的小節(jié)列表,用戶通過單擊某一小節(jié)的標題,在課程展示區(qū)就可以看到本小節(jié)所對應(yīng)的課程內(nèi)容,并根據(jù)課程內(nèi)容進行相應(yīng)的學習。該系統(tǒng)的后端“課程管理模塊”界面如圖3所示。
用戶可以通過“課程管理模塊”對課程的“章節(jié)標題”以及“文章內(nèi)容”分別進行管理。例如,用戶可以通過“章標題維護”菜單對“章標題”進行新增、刪除、查詢、修改操作;通過“節(jié)標題維護”菜單可以對某一章下面的“小節(jié)標題”進行新增、刪除、查詢、修改操作;通過“文章新增”菜單可以對某一小節(jié)下面的文章進行新增;通過“文章維護”這一菜單可以對已有的文章進行修改或者刪除操作。
值得一提的是,該系統(tǒng)中的“文章新增”以及“文章修改”這兩個功能已經(jīng)做了人性化處理。用戶在新增文章的時候,很有可能不是將所有章節(jié)的文章一次性添加完畢。實際上,用戶無需關(guān)心哪些文章曾經(jīng)添加過或者還有哪些文章需要新增等類似的問題。該系統(tǒng)會將所有已經(jīng)添加過的文章以“下拉列表”的形式自動展現(xiàn)在“文章修改”功能界面。同時,系統(tǒng)會將沒有添加過文章的章節(jié)標題以“下拉列表”的形式自動展現(xiàn)在“文章新增”功能界面中?!拔恼滦略觥币约啊拔恼滦薷摹边@兩個功能做到了相對獨立并且互斥,不會出現(xiàn)用戶操作錯誤的情況。要做到以上這一點,需要在數(shù)據(jù)庫層面對SQL語句進行相應(yīng)的優(yōu)化處理。其中,“文章新增”功能界面如下頁圖4所示,“文章修改”功能界面如圖5所示。
● 關(guān)鍵技術(shù)處理
1.關(guān)于input輸入函數(shù)
例如,有這樣一段包含input函數(shù)的代碼如圖6所示。
經(jīng)過前端預(yù)處理后,以上代碼在運行時會首先彈出一個對話框,要求用戶輸入密碼。假如用戶輸入的密碼為“abc”,經(jīng)過前端進一步的預(yù)處理后會變成如圖7所示的代碼。
2.關(guān)于time模塊下的sleep函數(shù)
例如,有如圖8所示的一段代碼,代碼中的time.sleep(1)這條語句會被解析成print(“!$1$!”),其余代碼保持不變。負責第一次解析的核心代碼如下頁圖9所示。
經(jīng)過第一次解析后的代碼會由前端發(fā)送到后臺,經(jīng)過“代碼處理模塊”中的Python解釋器解釋執(zhí)行后,結(jié)果被返還給前端,前端拿到的結(jié)果會被二次解析。第二次解析主要是將“!$1$!”中的數(shù)字“1”解析出來并還原成類似sleep(1)這樣的函數(shù),隨后,在前端運用JavaScript技術(shù)來模擬sleep函數(shù)的效果。負責第二次解析的核心代碼如下頁圖10所示。
3.關(guān)于中英文錯誤提示
本模塊主要采用了字典這種數(shù)據(jù)結(jié)構(gòu)來實現(xiàn)中英文對照的錯誤提示功能。如果用戶輸入的Python代碼有語法錯誤,代碼在后臺被解析時會報錯。在后臺可以將Python解釋器給出的錯誤提示信息與字典中的key進行比對,如果比對成功則輸出對應(yīng)的value值到前端頁面的錯誤提示區(qū)。字典范例如下頁圖11所示。
4.關(guān)于語法高亮
在實現(xiàn)“語法高亮”這一功能時需要前端與后臺配合完成。后臺主要負責將代碼轉(zhuǎn)換成一種特定的HTML格式,并且生成配套的CSS樣式表。前端則負責將后臺傳遞過來的HTML+CSS內(nèi)容渲染到頁面,呈現(xiàn)出語法高亮效果。核心代碼如圖12所示。
● 幕前幕后
研發(fā)這個平臺涉及的技術(shù)點非常多,能夠順利完成研發(fā)工作,得益于筆者平時注重技術(shù)的點滴積累。筆者在涉獵知識時遵循“廣度優(yōu)先”的原則,優(yōu)先追求知識的廣度,擴寬自己的知識面。在應(yīng)用知識時筆者遵循“深度優(yōu)先”的原則,優(yōu)先追求知識的深度,深入鉆研某一方面的知識,直到弄懂為止。
筆者利用業(yè)余時間研發(fā)這個平臺,前后歷時約6個月。一路走來,雖然有些忙碌,但內(nèi)心卻感到充實。感謝評委老師們給予的較高評價以及中肯的建議。感謝一直以來陪伴、鼓勵和支持我的家人。感謝本單位信息中心的領(lǐng)導和老師在平臺研發(fā)過程中給筆者提供的資源支持。
附:《Python在線交互式編程平臺》數(shù)字學習工具二維碼