康甜甜
雪峰中學(xué) 浙江 義烏 322000
在信息技術(shù)課程改革的背景下,編程教育越來(lái)越受到重視。在最新改版后的浙教版信息技術(shù)教材中,算法和編程教育占據(jù)了很大的比重,整個(gè)八年級(jí)上冊(cè)的信息技術(shù)教材都是Python語(yǔ)言程序設(shè)計(jì)。Python語(yǔ)言對(duì)于教師和學(xué)生來(lái)說(shuō)都是全新的內(nèi)容,教師在教學(xué)中也沒(méi)有太多可借鑒的教學(xué)實(shí)例[1]。如何讓學(xué)生更輕松高效學(xué)習(xí)Python,筆者結(jié)合自身經(jīng)驗(yàn)和查閱資料,進(jìn)行了多種嘗試?,F(xiàn)就對(duì)Python教學(xué)策略展開(kāi)討論。
Python程序語(yǔ)言是一個(gè)新事物,學(xué)生沒(méi)有什么編程基礎(chǔ)。編程本身比較抽象,學(xué)生沒(méi)有編程思維,且不習(xí)慣用編程語(yǔ)言解決問(wèn)題。教學(xué)中總是出現(xiàn)學(xué)生現(xiàn)有認(rèn)知水平和所學(xué)知識(shí)落差較大的情況。因此一開(kāi)始學(xué)習(xí)Python編程會(huì)比較艱難,學(xué)生也搞不懂到底在學(xué)些什么,長(zhǎng)此以往便學(xué)不下去了。針對(duì)這樣的情況,老師們可以利用一些與生活相關(guān)的情境,減輕學(xué)習(xí)之初對(duì)編程的畏懼心理,激發(fā)學(xué)習(xí)興趣,提高學(xué)習(xí)效果。
例如,在介紹Python語(yǔ)言時(shí),教師可以通過(guò)一些案例或視頻講解Python編出來(lái)的程序或游戲,并給學(xué)生展示用C語(yǔ)言和Python語(yǔ)言編寫(xiě)同一程序的代碼,讓學(xué)生對(duì)比感受Python語(yǔ)言的簡(jiǎn)潔,從而激發(fā)了學(xué)生的學(xué)習(xí)興趣,降低了對(duì)編程學(xué)習(xí)的抵觸心理。
在學(xué)習(xí)中,教師可以用生活中的一些實(shí)例來(lái)引入。例如,在學(xué)習(xí)多分支結(jié)構(gòu)程序設(shè)計(jì)時(shí),教師先引入這樣的情境讓學(xué)生編寫(xiě)程序:在旅游景點(diǎn)買(mǎi)票時(shí),如果1.2m以下免票,1.2-1.5m半價(jià)票,超過(guò)1.5m全票,那么買(mǎi)票時(shí)究竟要付多少錢(qián)。對(duì)于這種生活化的問(wèn)題,學(xué)生馬上就能想到按照身高考慮票價(jià)。對(duì)于3種身高情況,用學(xué)過(guò)的if-else語(yǔ)句不能解決問(wèn)題。這時(shí)候老師引入if-elif多分支語(yǔ)句,學(xué)生很快就能掌握多分支語(yǔ)句的應(yīng)用情況,也會(huì)在剛剛學(xué)會(huì)之后對(duì)新知識(shí)躍躍欲試。此時(shí)教師再引入下一個(gè)問(wèn)題,如何將一個(gè)百分制的成績(jī)按要求轉(zhuǎn)化為相應(yīng)的A、B、C、D、E五個(gè)等級(jí)。有了上一次成功編寫(xiě)程序的經(jīng)歷,學(xué)生也很快地從這一與自身生活貼近的情境中總結(jié)出解題方法,增強(qiáng)了學(xué)習(xí)編程的自信。
循環(huán)結(jié)構(gòu)的學(xué)習(xí)是Python編程的難點(diǎn),開(kāi)始循環(huán)結(jié)構(gòu)的學(xué)習(xí)后學(xué)生很快就產(chǎn)生厭倦心理。在這一階段,教師可以用更簡(jiǎn)單的情景引導(dǎo)學(xué)生學(xué)習(xí)。例如,教師在講解棋牌上的麥粒這一問(wèn)題前先引入存錢(qián)的問(wèn)題:每天往一個(gè)存錢(qián)罐存入2元錢(qián),一周之后一共存了多少錢(qián)。學(xué)生很快就能說(shuō)出答案為14,那么中間的過(guò)程又是怎樣的呢。這時(shí)教師帶領(lǐng)學(xué)生借助表格推演一周內(nèi)存錢(qián)罐累加存錢(qián)的過(guò)程,這一案例對(duì)接下來(lái)理解棋盤(pán)上的麥粒問(wèn)題更有幫助。
在學(xué)習(xí)Python編程時(shí),教師通過(guò)創(chuàng)設(shè)情境激發(fā)學(xué)生的學(xué)習(xí)興趣,降低學(xué)生的畏難心理,將抽象的學(xué)習(xí)融入更有趣的情境中,促進(jìn)學(xué)生更好地學(xué)習(xí)。
在Python教學(xué)中,發(fā)現(xiàn)學(xué)生存在較大的個(gè)體差異。有些學(xué)生基礎(chǔ)差一些,注意力也不集中,稍微復(fù)雜一點(diǎn)的內(nèi)容從一開(kāi)始就聽(tīng)不懂,一節(jié)課都跟不上節(jié)奏。為了減少部分學(xué)生跟不上的情況,我們可以借助導(dǎo)學(xué)案,給學(xué)生提供一個(gè)“向?qū)А保寣W(xué)生們知道每一步要干什么,解決問(wèn)題的過(guò)程是怎樣的。
例如,在開(kāi)始學(xué)習(xí)for循環(huán)時(shí),為了幫助學(xué)生理解for循環(huán)的執(zhí)行過(guò)程,導(dǎo)學(xué)案中設(shè)計(jì)了一系列由易到難的問(wèn)題,學(xué)生探究并回答問(wèn)題。教學(xué)中教師下發(fā)導(dǎo)學(xué)案,學(xué)生借助導(dǎo)學(xué)案,跟著教師的節(jié)奏一起學(xué)習(xí)。
過(guò)程1:在以下案例中(如圖1),為了讓學(xué)生能理解每次循環(huán)時(shí)變量的變化和程序運(yùn)行的過(guò)程,教師帶領(lǐng)學(xué)生共同探究經(jīng)歷了幾次循環(huán),循環(huán)事件是什么,第n次循環(huán)中循環(huán)變量i的值是什么,運(yùn)行結(jié)果又是什么。
圖1 輸出各個(gè)字符
過(guò)程2:在教師講解range()函數(shù)時(shí),學(xué)生對(duì)range()函數(shù)的格式和參數(shù)設(shè)置在理解上有一定的難度。這時(shí)教師可以通過(guò)設(shè)置不同的起始值、終值和步長(zhǎng),將遍歷的結(jié)果列舉出來(lái)幫助學(xué)生理解range()函數(shù)。運(yùn)用變式,將案例進(jìn)行多種變化,讓學(xué)生體會(huì)起始值、終值和步長(zhǎng)對(duì)程序執(zhí)行的影響。這時(shí)候?qū)W生可以利用剛剛學(xué)過(guò)的知識(shí)進(jìn)行遷移,以同桌兩人為單位,合作探究以下三個(gè)程序(如圖2),并完成任務(wù)單上的問(wèn)題:共經(jīng)歷了幾次循環(huán),循環(huán)事件是什么,第n次循環(huán)中循環(huán)變量i的值是什么,運(yùn)行結(jié)果又是什么。
圖2 range函數(shù)變式
在本案例中,一開(kāi)始學(xué)生對(duì)于循環(huán)執(zhí)行過(guò)程無(wú)從下手。教師帶領(lǐng)學(xué)生用導(dǎo)學(xué)案學(xué)習(xí),導(dǎo)學(xué)案把程序執(zhí)行過(guò)程進(jìn)行了拆解,讓學(xué)生通過(guò)一步步完成導(dǎo)學(xué)案上的問(wèn)題而理解程序執(zhí)行的過(guò)程。導(dǎo)學(xué)案的作用相當(dāng)于一幅地圖,能引導(dǎo)學(xué)生跟上學(xué)習(xí),促進(jìn)教學(xué)目標(biāo)的實(shí)現(xiàn)。
義務(wù)教育階段,學(xué)生在學(xué)習(xí)基礎(chǔ)、學(xué)習(xí)能力等方面參差不齊。教師在教學(xué)中應(yīng)關(guān)注整體,正視學(xué)生的個(gè)別差異。Python編程是一門(mén)邏輯性非常強(qiáng)的語(yǔ)言,很多學(xué)生學(xué)了很久還是不能入門(mén)[2]。如果按照書(shū)本的節(jié)奏安排課程,很多學(xué)生很快就學(xué)不下去了。有些學(xué)生對(duì)編程很感興趣,甚至小學(xué)或初中參加過(guò)編程培訓(xùn)課程,他們可以跟上課堂的節(jié)奏。這樣的尷尬情景,讓某些學(xué)生越學(xué)越失去信心,越學(xué)越懼怕。長(zhǎng)此以往,學(xué)生便在學(xué)習(xí)中產(chǎn)生了較大的分化。到了高中以后,學(xué)生還要學(xué)習(xí)Python,初中的不良體驗(yàn)會(huì)讓部分學(xué)生直接放棄學(xué)習(xí)Python編程。為了滿(mǎn)足不同學(xué)生的學(xué)習(xí)需求,讓盡可能多的學(xué)生都能學(xué)有所得,可以采用分層教學(xué)。
例如,在練習(xí)input()和print()函數(shù)的使用方法時(shí),教師展示人機(jī)交互情境,實(shí)現(xiàn)姓名和年紀(jì)的一問(wèn)一答。完成較快的同學(xué)這時(shí)候可以在此基礎(chǔ)上續(xù)寫(xiě)對(duì)話,讓電腦繼續(xù)提問(wèn)年紀(jì)或興趣愛(ài)好等其他問(wèn)題(如圖3)。這種分層的任務(wù)設(shè)置,其實(shí)質(zhì)上是讓慢一點(diǎn)的學(xué)生掌握基礎(chǔ)的知識(shí)和技能,學(xué)得快的同學(xué)進(jìn)一步鞏固練習(xí)。這種“分情況”的教學(xué)任務(wù)設(shè)置,不會(huì)讓好一點(diǎn)的學(xué)生吃不飽,也不會(huì)讓基礎(chǔ)差一點(diǎn)的學(xué)生不想吃,看到復(fù)雜的學(xué)習(xí)任務(wù)直接喪失學(xué)習(xí)興趣,也讓老師對(duì)所有學(xué)生的學(xué)習(xí)情況有了更全面的了解。
圖3 輸入輸出練習(xí)
例如,在利用while循環(huán)編寫(xiě)復(fù)雜的程序時(shí),對(duì)于基礎(chǔ)弱一點(diǎn)的學(xué)生,完成“銀行儲(chǔ)蓄問(wèn)題”就好。速度快一點(diǎn)的學(xué)生,可以嘗試編寫(xiě)程序,判斷加到第幾項(xiàng)時(shí)s=1+2+3……+n值會(huì)超過(guò)1000,s=1+1/2+1/3+1/4+……+1/n的值會(huì)超過(guò)15。這種分層次的教學(xué)任務(wù)設(shè)置,體現(xiàn)了面向全體學(xué)生的教學(xué)原則,也照顧到了不同學(xué)生的學(xué)習(xí)需求,讓教師的教適應(yīng)了學(xué)生的學(xué),同時(shí)也促進(jìn)了學(xué)生之間的適當(dāng)競(jìng)爭(zhēng),提高學(xué)習(xí)效果。
分層教學(xué)體現(xiàn)了因材施教的教學(xué)思想,每位同學(xué)的理解水平和操作技能存在較大的差異,“一刀切”的課堂絕對(duì)不是有效的課堂。長(zhǎng)此以往,學(xué)生對(duì)信息技術(shù)的學(xué)習(xí)喪失興趣,班級(jí)的成績(jī)也會(huì)斷層嚴(yán)重。
在利用Python語(yǔ)言編寫(xiě)程序的過(guò)程中,學(xué)生們經(jīng)常會(huì)出現(xiàn)中英文符號(hào)切換錯(cuò)誤、縮進(jìn)格式錯(cuò)誤等問(wèn)題。教師在學(xué)生開(kāi)始編程之前也會(huì)強(qiáng)調(diào)這些注意事項(xiàng),但是效果往往不好。教師可以在學(xué)生出錯(cuò)的時(shí)候因勢(shì)利導(dǎo),讓學(xué)生學(xué)會(huì)在錯(cuò)誤中查找原因并深刻領(lǐng)悟注意事項(xiàng),攻克了課堂重難點(diǎn)。當(dāng)錯(cuò)誤出現(xiàn)時(shí),教師可以演示學(xué)生的錯(cuò)誤,讓全班同學(xué)共同糾錯(cuò)。最后教師總結(jié)語(yǔ)法規(guī)則和語(yǔ)句格式,學(xué)生也能更深刻地理解Python使用規(guī)則,也提高了糾錯(cuò)能力。
例如,在《順序結(jié)構(gòu)程序設(shè)計(jì)》一課,學(xué)生在編寫(xiě)程序利用海倫公式求三角形面積時(shí),在將數(shù)學(xué)公式轉(zhuǎn)為Python表達(dá)式時(shí)會(huì)出現(xiàn)很多錯(cuò)誤。正確的面積計(jì)算公式是s=(p*(p-a)*(pb)*(p-c))**0.5。很多學(xué)生會(huì)出現(xiàn)漏掉*和()、括號(hào)不匹配等問(wèn)題,出現(xiàn)錯(cuò)誤。另外,學(xué)生在使用輸出函數(shù)時(shí)也會(huì)出現(xiàn)錯(cuò)誤。正確的語(yǔ)句是print('三角形的面積為:',s),很多學(xué)生會(huì)把引號(hào)當(dāng)作中文字體,s前的逗號(hào)也容易漏掉[3]。學(xué)生根據(jù)自己的經(jīng)驗(yàn)往往看不出來(lái)錯(cuò)誤原因。這時(shí)教師讓這個(gè)學(xué)生演示錯(cuò)誤,其他學(xué)生一起來(lái)糾錯(cuò)。通過(guò)糾錯(cuò)的過(guò)程,很多學(xué)生會(huì)意識(shí)到編寫(xiě)程序的易錯(cuò)點(diǎn),并從別人的錯(cuò)誤中學(xué)習(xí)。這種錯(cuò)誤資源的利用比教師苦口婆心的講解讓學(xué)生印象更深刻,從而提高了教學(xué)效果。
另外,在學(xué)習(xí)分支結(jié)構(gòu)或循環(huán)結(jié)構(gòu)的語(yǔ)句格式時(shí),教師也可以給學(xué)生發(fā)一些改錯(cuò)的練習(xí)來(lái)加強(qiáng)學(xué)生對(duì)語(yǔ)句格式的理解。例如,學(xué)生在剛學(xué)習(xí)多分支結(jié)構(gòu)if-elif語(yǔ)句格式后,容易把它和if-else語(yǔ)句的使用格式搞混掉。對(duì)于“比較3個(gè)數(shù)a,b,c,輸出其中最大的數(shù)”這個(gè)程序,教師發(fā)給學(xué)生改錯(cuò)練習(xí)(如圖4),讓學(xué)生分析。很多學(xué)生能看出來(lái)else語(yǔ)句格式錯(cuò)誤,原因是沒(méi)有理清if-elif和if-else語(yǔ)句的格式區(qū)別。隨后,教師可以進(jìn)一步優(yōu)化程序,引導(dǎo)學(xué)生分析elif和else語(yǔ)句本身就意味著排除了if語(yǔ)句的條件,因此a肯定不是最大的數(shù),只需要比較b和c就可以確定最大的數(shù),即elif判斷條件為“elif b>=c:”。整個(gè)改錯(cuò)的過(guò)程可以提高學(xué)生閱讀和分析程序的能力,為后續(xù)編寫(xiě)其他多分支結(jié)構(gòu)程序打下基礎(chǔ)。
圖4 改錯(cuò)練習(xí)
錯(cuò)誤是防不住的,能夠發(fā)現(xiàn)錯(cuò)誤并糾正錯(cuò)誤往往能讓學(xué)生對(duì)知識(shí)記憶更深。
Python編程是新的教育熱點(diǎn),它對(duì)初中學(xué)生來(lái)說(shuō)是一個(gè)巨大的挑戰(zhàn)。其實(shí)很多老師也是第一次接觸Python,多少也會(huì)產(chǎn)生一種心里沒(méi)底的感覺(jué)。Python的很多用法跟傳統(tǒng)的C或C++等語(yǔ)言有很多不同,教師也是先學(xué)后教。教師在組織教學(xué)活動(dòng)時(shí)結(jié)合教學(xué)要求和學(xué)生的學(xué)情,從自己作為一個(gè)學(xué)習(xí)者的角度出發(fā),聯(lián)系自己大學(xué)階段剛學(xué)編程語(yǔ)言的心理和經(jīng)歷,在初中生的理解和認(rèn)知水平基礎(chǔ)上研究如何能更通俗有效地引導(dǎo)學(xué)生學(xué)習(xí)Python編程。在實(shí)踐中,教師運(yùn)用多種策略,盡可能讓學(xué)生更好地學(xué)習(xí)Python編程,為后續(xù)學(xué)習(xí)打下基礎(chǔ)。