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