沈涵飛
摘? ?要:為提高“Python程序設計”課程的教學質(zhì)量,文章構建了基于程序在線評測系統(tǒng)的練習平臺,并針對課程特點和高職學生設計了多層次的題庫,文章提出了“任務驅(qū)動,知識配套”的理念,將評價的重點放在了學生運用Python語言解決問題的能力上。實踐表明,在線評測系統(tǒng)的使用有效提高了“Python程序設計”課程的教學質(zhì)量。
關鍵詞:Python教學;在線評測系統(tǒng);速查表;計算思維;任務驅(qū)動
Python由吉多·范羅蘇姆(Guido van Rossum)于1989年年底發(fā)明,目前已經(jīng)應用到很多領域,被諸多高校選定為學生的程序設計入門語言。相較于Java,PHP,C++這些傳統(tǒng)語言,Python顯得更加簡潔、易讀、可擴展,它的這3個優(yōu)勢讓其在開發(fā)者中大受歡迎并成為人工智能和大數(shù)據(jù)領域的首選編程語言。“Python程序設計”課程的實踐性很強,以語言語法描述為主線的傳統(tǒng)教學方式使教學重點自覺或不自覺地偏向理論,降低了對學生實踐能力的培養(yǎng)和考核,無法充分鍛煉和提高學生的程序設計能力,不利于學生的專業(yè)技能發(fā)展。
1? ? 課程教學方式的變化
高職學生的培養(yǎng)目標是將其培養(yǎng)為應用型人才。應用型人才的核心能力是工程實踐能力,是一種綜合能力[1]。計算機類學生工程實踐能力的基礎和核心在于學生的編程、計算思維、算法、創(chuàng)新等基本程序設計能力[2]。
“Python程序設計”課程的主要目標就是培養(yǎng)學生編寫程序、解決問題的能力。問題求解能力是在不斷解決問題的過程中逐步提高和強化的,因此需要有一個練習平臺能夠支撐學生來完成足夠多的練習。
課程教學需要合理設計練習內(nèi)容,以任務驅(qū)動為中心,語言知識圍繞任務逐步引入,讓學生在做中學、學中做,將知識學習和應用實踐充分結合,通過實踐來提升培養(yǎng)工程實踐能力。
從Python語言和學生的特點出發(fā),確定的新的教學方式以程序設計為主線,在完成任務的過程中,深化對Python的理解,這種教學方式的實施離不開練習平臺的支撐。實踐表明,將最初用于高水平程序設計競賽的在線評測系統(tǒng)應用到“Python程序設計”課程,是一種可行并有效的方式。
2? ? 程序在線評測系統(tǒng)在教學中的應用
最初開始“Python程序設計”教學時,課程的實踐教學環(huán)節(jié)停留在學生編寫程序代碼、撰寫紙質(zhì)實驗報告,再由教師批改這一過程。這種方式存在幾個問題:(1)教師需要花大量的時間和精力來批改作業(yè)。(2)學生獲得反饋的周期較長,導致學習興趣逐漸減退。(3)學生看不到同伴的完成狀況,無法激發(fā)學生之間的競爭意識。把程序在線評測系統(tǒng)引入“Python程序設計”的教學可以有效地解決這些問題。
2.1? 程序在線評測系統(tǒng)的介紹
程序在線評測系統(tǒng)(Online Judge,OJ)是基于Web的服務器端判題系統(tǒng),其主要功能包括題庫管理、在線提交、實時評測、網(wǎng)上考試、系統(tǒng)監(jiān)控等。用戶注冊后,可以根據(jù)題目在線提交多種編程語言(C,C++,Python等)源代碼,系統(tǒng)編譯源代碼后執(zhí)行,采用黑盒測試的方式,通過和預設測試數(shù)據(jù)的比對來檢驗源代碼的正確性。
程序在線評測系統(tǒng)最先應用于ACM-ICPC國際大學生程序設計競賽和信息學奧林匹克競賽的自動判題和訓練中,現(xiàn)已逐步應用于高水平本科院校高級語言程序設計、數(shù)據(jù)結構與算法分析等課程的實踐教學中,并取得了較好的效果[3]。
在實踐過程中,系統(tǒng)采用的是HUST Online Judge System,是由華中科技大學畢業(yè)生王良晶等開發(fā)并在2008年年底以GPL協(xié)議開源的在線評測系統(tǒng)[4],該系統(tǒng)基于PHP和MySQL開發(fā),運行在Linux平臺。以此系統(tǒng)為基礎,本研究做了簡單的改進,搭建了Python程序自動評測系統(tǒng),網(wǎng)址為http://oj.csoeasycom/。
2.2? 程序在線評測系統(tǒng)的題庫設計
高水平程序設計競賽和高職“Python程序設計”的教學目的和對象存在很大差別。“Python程序設計”課程的要求是讓學生熟練掌握Python的核心數(shù)據(jù)結構來解決常見任務,對算法和數(shù)據(jù)結構的掌握沒有太多要求,這就需要針對課程和學生特點進行改進。采取了下列措施使評測系統(tǒng)能更好地服務于課程的教學:(1)大幅度增加了基礎題目的比重,讓學生能夠花較少的時間完成大多數(shù)練習,增強學生的信心。(2)創(chuàng)建套題,增強題目之間的關聯(lián)性、循序漸進,給學生提供更多的臺階。(3)充分利用Web的特點,在題目中盡可能配圖,增強系統(tǒng)的親和力,讓學生樂于使用。(4)在難度較大的題目中給出提示、線索、部分代碼等,降低學生完成的難度,減少學生的挫敗感。
2.3? 使用速查表提高學習效率
為配合在線評測系統(tǒng)在Python課程中的使用,克服學生的畏難情緒,讓學生聚焦于任務解決,提高學生處理任務的效率,課程組給學生設計了速查表(Cheat Sheet)。速查表內(nèi)容簡潔,能根據(jù)學生的反饋及時調(diào)整,快速響應學生的需求。
速查表的內(nèi)容凝聚了Python語言的核心知識點和最常用代碼,選學內(nèi)容只提供線索,鼓勵學生在需要的時候,依據(jù)線索在互聯(lián)網(wǎng)上查找,有助于培養(yǎng)學生的自主學習能力。
提交到在線評測系統(tǒng)的程序可以劃分成輸入、處理和輸出3部分。在速查表中,對常用的聲明、輸入、輸出歸納成形成表格供學生參考,這樣可以避免學生在這些部分出現(xiàn)錯誤,有利于學生將精力集中在任務的核心部分—數(shù)據(jù)計算。
在處理評測系統(tǒng)的多個輸入時,需要用到列表生成式,這對剛接觸Python的學生存在一定困難。由于評測系統(tǒng)的輸入模式相對固定,通過歸納,常用輸入方式如表1所示。
評測系統(tǒng)對于輸出格式也有嚴格的要求,初學者常會困惑遇到“格式錯誤”的問題,所以也提供了輸出模板給學生參考,如表2所示。
速查表還將實驗題目中最常用到的代碼設計成模塊,學生可以運用這些模塊來解決較復雜的問題,這也有助于學生體會結構化程序設計的核心—函數(shù)和模塊劃分。
2.4? 教學內(nèi)容和順序的調(diào)整
新的教學模式調(diào)整了傳統(tǒng)的教學內(nèi)容和順序,以實踐課為主,重點放在思路分析。學生只需理解和掌握速查表中的核心內(nèi)容,知識點夠用就行,更多的是鼓勵學生運用Python解決任務,培養(yǎng)計算思維。
在學生的Python編程和計算思維能力得到了有效的提升后,再逐步引入Python的更多語法和細節(jié),介紹了同一任務的不同解決方式。由于學生的感性知識有了足夠的積累,其接受理論知識的速度也大大提高。
3? ? Python和C語言的不同
在線評測系統(tǒng)中最常用的程序設計語言是C語言和C++語言。C語言誕生于20世紀70年代初,設計的基本原則是讓機器能更快運行,缺乏抽象層次較高的數(shù)據(jù)類型。Python的設計的主要目的是提高程序員的開發(fā)效率,運行速度并不是首要考慮,提供了字符串、列表、字典等功能強大的數(shù)據(jù)類型。因此,Python在處理任務時,編寫的代碼相對于C語言更為簡潔。下面以內(nèi)置函數(shù)、字符串、字典、匿名函數(shù)lambda等幾個方面展示Python處理任務的特色。
3.1? 內(nèi)置函數(shù)和標準庫函數(shù)
示例:階乘求和。求Sn=1!+2!+3!+4!+5!+…+n!之值,其中,n是一個數(shù)字,樣例輸入:5,樣例輸出:153。
在C語言中,求階乘很容易溢出。在Python3中,只要內(nèi)存能容納,不存在整數(shù)溢出的問題,整數(shù)也是對象。標準庫math提供了計算階乘的函數(shù),內(nèi)置函數(shù)sum能直接求和,大大簡化了計算過程。
import math
n = int(input())
print(sum([math.factorial(i) for i in range(1, n+1)]))
3.2? 字符串
示例:在屏幕上輸出100行“good good study,day day up”。
在C語言中,通常使用循環(huán)來實現(xiàn)輸出。而在Python中,則利用字符串的“*”號運算,避免循環(huán)。
print(‘good good study,day day up\n*100)
示例:輸入10個數(shù)字,然后逆序輸出。輸入:十個整數(shù);輸出:逆序輸出,空格分開。注意:最后一個數(shù)字后面是沒有空格的,如果在最后一個數(shù)字后面輸出了空格,會導致“格式錯誤”。
使用字符串的join方法,能很容易的把列表的內(nèi)容連接成字符串。
L = input().split()
print( '? ?'.join(L[::-1]))
3.3? 字典
示例:數(shù)字轉換成星期。輸入一個數(shù)字(1~7),輸出對應的星期,輸入其他的數(shù)字,輸出Error。
例如:輸入1,輸出Monday;輸入2,輸出Tuesday;輸入8,輸出“Error”。
在C語言中,通常采用分支語句來處理。在Python中,利用字典來解決,更為簡潔和優(yōu)雅。
d = {‘1: ‘Monday,? ‘2: ‘Tuesday,? ‘3: ‘Wednesday,? ‘4: ‘Thursday,
‘5: ‘Friday,? ?‘6: ‘Saturday,? ‘7: ‘Sunday}
s = input()
if s in d:
print(d[s])
else:
print(‘Error)
3.4? 匿名函數(shù)lambda
示例:從兩個字符串中輸出較長的字符串。比較兩個字符串的長度,將其中長度較長的字符串輸出。如果兩個字符串的長度相同,則輸出第1個字符串。輸入:兩個字符串。輸出:長度較長的字符串。
Python提供了內(nèi)置函數(shù)max,該函數(shù)是高階函數(shù),可以接Lambda函數(shù)來簡潔的處理任務。
s1 = input()
s2 = input()
print(max(s1, s2, key=len))
4? ? 成效分析
采用基于程序在線評測系統(tǒng)的練習平臺后,Python課程教學獲得了以下成效:(1)學生提交作業(yè)后,獲得及時反饋,有利于提高學生的積極性。(2)學生能實時看到同伴的完成狀況,營造了你追我趕的良好氛圍。(3)學生不再受時間和地點的約束,通過互聯(lián)網(wǎng)就能訪問,有利于自主學習。(4)教師從傳統(tǒng)的向?qū)W生傳授知識轉變?yōu)閰f(xié)助學生解決任務。(5)有利于教師提前發(fā)現(xiàn)對Python學習充滿熱情的學生,對其進行了針對性的培養(yǎng),并鼓勵成為教學小助手;
基于在線評測系統(tǒng)的練習平臺除了用于“Python程序設計”的教學外,還用于競賽的培訓,兩者實現(xiàn)了無縫銜接。在2019年全國職業(yè)院校技能大賽高職組“大數(shù)據(jù)技術與應用”賽項中,學生柳宇陽、居吉、趙天豪組成的團隊以第4名的成績榮獲全國一等獎。
5? ? 結語
本文簡要分析了高職“Python程序設計”課程的現(xiàn)狀,提出了“任務驅(qū)動、知識配套”的理念,并以開源的在線評測系統(tǒng)HustOJ為基礎構建了練習平臺,鼓勵學生應用速查表來解決任務,將評價的重點放在了學生運用Python處理任務的能力上。這些措施突出了課程的重點,降低了學習過程中的障礙,激發(fā)了學生的好勝心和學習熱情,培養(yǎng)了學生的計算思維。在采取了新的教學方式后,教學質(zhì)量有了大幅度的提高,并在全國職業(yè)院校技能大賽中取得了優(yōu)異的成績。
[參考文獻]
[1]蔣宗禮.本科工程教育:聚焦學生解決復雜工程問題能力的培養(yǎng)[J].中國大學教學,2016(11):27-30,84.
[2]蔣宗禮.計算機類專業(yè)人才專業(yè)能力構成與培養(yǎng)[J].中國大學教學,2011(10):11-14.
[3]林巧,韓建民.基于在線評測系統(tǒng)的C語言實踐教學探討[J].實驗科學與技術,2011(9):37-39
[4]張浩斌.基于開放式云平臺的開源在線評測系統(tǒng)設計與實現(xiàn)[J].計算機科學,2012(39):339-343.
Application of online judge system in “Python Programming”
course in higher vocational colleges
Shen Hanfei
(Suzhou Industrial Park Institute of Services Outsourcing, Suzhou 215123, China)
Abstract:In order to improve the teaching quality of “Python Programming” course, this paper constructs an online judge system. A multi-level question bank is designed according to the course characteristics and higher vocational students. The concept of “task-driven, knowledge matching” is proposed in this paper, the evaluation focuses on students ability to solve problems using Python, practice shows that the online judge system has effectively improved the teaching quality of “Python Programming” course.
Key words:Python programming teaching; online judge system; cheat sheet; computational thinking; task driven