沈涵飛


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