王靜文 崔國亮
高中信息技術(shù)新教材的編程和算法教學(xué)注重培養(yǎng)學(xué)生的計算思維,體現(xiàn)了新課標(biāo)發(fā)展學(xué)生核心素養(yǎng)和學(xué)科能力的理念。本文旨在探究如何在課堂教學(xué)中設(shè)計豐富的學(xué)習(xí)活動,培養(yǎng)學(xué)生的計算思維,并引導(dǎo)學(xué)生產(chǎn)生思維遷移以解決實際問題。
● 遞進式培養(yǎng)策略概述
信息技術(shù)學(xué)科與時俱進,不再局限于知識技能和工具操作,而是注重培養(yǎng)學(xué)生數(shù)字化環(huán)境下的思維方式,使學(xué)生能夠合理運用信息技術(shù)解決實際問題。為了培養(yǎng)學(xué)生的計算思維,新教材的編程和算法教學(xué)采用項目式學(xué)習(xí)方式,讓學(xué)生在做中學(xué),在學(xué)中做。在項目式學(xué)習(xí)中,應(yīng)用和實踐是學(xué)習(xí)的載體,活動過程就是獲得知識和培養(yǎng)能力的過程。
高一學(xué)生以前沒有接觸過Python編程,面對具體的情境,學(xué)生能用自己的話說出解決問題的方法,但不知如何用計算機程序來實現(xiàn)。例如,判斷一個數(shù)的奇偶性,通??此芊癖?整除,轉(zhuǎn)換成編程計算,則采用對2取模的方法,判斷余數(shù)是否為0。學(xué)生的計算思維需要慢慢形成,可以從解決簡單的問題開始培養(yǎng),讓學(xué)生在學(xué)習(xí)活動中一邊熟悉基本語法,一邊提升思維能力。
教師在教學(xué)中要不斷摸索,體會“用教材教”而不是“教教材”。教材中的資源一般具有普適性,是優(yōu)質(zhì)資源,但是不一定滿足所有學(xué)生的需求,教師可以根據(jù)學(xué)情補充相關(guān)資源。因此,依據(jù)教材資源并結(jié)合信息學(xué)競賽輔導(dǎo)資源,設(shè)計一系列學(xué)習(xí)活動,作為教材的補充,可以讓活動內(nèi)容由淺入深,在活動開展過程中遞進式地培養(yǎng)學(xué)生的計算思維。
● 學(xué)習(xí)活動一脈相承
依據(jù)項目式學(xué)習(xí)因“需”定“學(xué)”的特點,基于課程標(biāo)準(zhǔn),結(jié)合學(xué)生的學(xué)情,我們對教科版必修1《數(shù)據(jù)與計算》第2單元“編程計算”的教學(xué)內(nèi)容進行了整體規(guī)劃,設(shè)計了一系列遞進式學(xué)習(xí)活動。
活動1:求一個三位正整數(shù)每位上的數(shù)字。
設(shè)計意圖:理解通過整除和取模等運算拆分?jǐn)?shù)字的方法;學(xué)會定義變量、使用賦值語句。拆分?jǐn)?shù)字的方法也將用于后面的問題解決中。
算法分析:利用“//”和“%”等算術(shù)運算符拆分一個三位數(shù),分別得到每位上的數(shù)字。
小結(jié):程序設(shè)計采用順序結(jié)構(gòu)。學(xué)生需要區(qū)分?jǐn)?shù)學(xué)與Python中算術(shù)運算符的表示方法與運算功能。
活動2:輸入一個三位正整數(shù),判斷它是不是回文數(shù)。若一個數(shù)字從左向右讀與從右向左讀都一樣,我們就將其稱之為回文數(shù)。
設(shè)計意圖:結(jié)合前面拆分?jǐn)?shù)字的算法提取出百位數(shù)和個位數(shù),判斷它們是否相等;熟練使用if分支語句進行條件判斷。
算法分析:如果數(shù)字n的百位數(shù)字h和個位數(shù)字u相等,則n是回文數(shù),否則不是。
小結(jié):程序設(shè)計采用分支結(jié)構(gòu)。學(xué)生已經(jīng)掌握拆分?jǐn)?shù)字的方法,在此基礎(chǔ)上,設(shè)計判斷回文數(shù)的算法變得容易一些。
活動3:反轉(zhuǎn)任意位數(shù)的正整數(shù),如輸入123,輸出321。
設(shè)計意圖:理解反轉(zhuǎn)數(shù)字的算法思想;了解while語句一般用于循環(huán)次數(shù)未知的情況。
算法分析:①將x除以10取余,求得個位數(shù),并將它添加到y(tǒng)中;②將x除以10取整,去掉個位數(shù);③重復(fù)步驟①②直到x為0;④輸出y。
小結(jié):程序設(shè)計采用循環(huán)結(jié)構(gòu)。算法中不僅包含拆分?jǐn)?shù)字的方法,還包含組合數(shù)字的方法,具有一定的難度?;顒又薪處熀蛯W(xué)生一起將流程圖補充完整,然后學(xué)生獨自將程序補充完整。
活動4:輸出所有的“水仙花”數(shù)。所謂的“水仙花數(shù)”,是指一個三位數(shù)其各位數(shù)字的立方和等于該數(shù)本身。
設(shè)計意圖:枚舉所有的三位數(shù),使用拆分?jǐn)?shù)字的方法,得到各位數(shù)字,然后通過計算進行判斷;綜合運用for循環(huán)和分支語句解決問題。
小結(jié):解決這個問題采用了循環(huán)+分支的程序結(jié)構(gòu)。學(xué)生學(xué)習(xí)的難點是for語句的循環(huán)過程和if語句條件的設(shè)置。學(xué)生需要注意,range()函數(shù)設(shè)置兩個參數(shù)時,會生成一個左閉右開的數(shù)字區(qū)間,在if語句的條件中兩個等號一起使用才能判斷相等。
活動5:火柴棒擺數(shù)字問題。有任意數(shù)量的火柴棒,列出這些火柴棒所能擺出的自然數(shù),要求火柴棒正好用完。
設(shè)計意圖:在解決問題的過程中,學(xué)會使用自定義函數(shù)進行程序設(shè)計。通過對算法進行優(yōu)化,學(xué)生加深對算法設(shè)計的理解。
算法分析:首先確定任意根火柴棒所能擺出的最大數(shù)字,火柴棒數(shù)量分為奇偶兩種情況,偶數(shù)根能擺出的最大數(shù)字由“snum//2”個1組成,奇數(shù)根火柴棒則先取出三根擺放數(shù)字7,然后用剩余的火柴棒擺放“snum//2-1”個1。參考程序如圖1所示。
算法優(yōu)化:上述程序中使用“*”運算符返回一個重復(fù)若干次的字符串,在Python語言中適用,在VB和C++等語言中都不適用。運用for循環(huán)計算任意根火柴棒所能擺出的最大數(shù)字,會使算法更加通用,而且不會增加算法的時間復(fù)雜度。相應(yīng)代碼修改如下頁圖2所示。
小結(jié):在程序設(shè)計中使用了自定義函數(shù)。理解自定義函數(shù)的難點是函數(shù)的調(diào)用過程:程序執(zhí)行從主程序開始,在主程序中遇到自定義函數(shù)的調(diào)用語句時,才會轉(zhuǎn)到自定義函數(shù)執(zhí)行,自定義函數(shù)執(zhí)行完成將返回值帶回給主程序。
拓展活動:十進制轉(zhuǎn)換R進制。
算法分析:把十進制非負(fù)整數(shù)轉(zhuǎn)換為R進制,可使用短除法,即“除R取余,逆序排列”。前面拆分十進制數(shù)字重復(fù)執(zhí)行對10取余、再整除10的操作;而十進制轉(zhuǎn)換R進制則重復(fù)執(zhí)行對R取余、再整除R的操作。
小結(jié):十進制轉(zhuǎn)換二進制本來是一個難點,學(xué)生不易理解,但是在前面解決了一系列數(shù)字問題之后,將解決問題的思維遷移過來,這個問題就迎刃而解了。
在以上活動中所涉及的程序從順序結(jié)構(gòu)到分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu),再到分支+循環(huán)結(jié)構(gòu),程序結(jié)構(gòu)不斷升級。簡單的拆分?jǐn)?shù)字方法在后面的活動中不斷使用,探究內(nèi)容保持在學(xué)生的最近發(fā)展區(qū)內(nèi)。在課堂上,學(xué)生積極思考,尋找解決問題的方法。學(xué)生在編寫代碼、調(diào)試程序、糾正錯誤的過程中,感受到了編程的樂趣,激發(fā)了學(xué)生的學(xué)習(xí)興趣。
● 教學(xué)反思貫穿始終
學(xué)生在學(xué)習(xí)編程與算法之前,可能存在畏難情緒,認(rèn)為程序代碼晦澀難懂,算法設(shè)計比較復(fù)雜,而通過整體規(guī)劃學(xué)習(xí)活動,能夠引導(dǎo)學(xué)生步步為營,在算法學(xué)習(xí)中找到樂趣。算法教學(xué)是一項連續(xù)性工程,學(xué)生計算思維的形成也不是短期能實現(xiàn)的,這就需要教師不斷反思、不斷摸索,梳理教學(xué)思路,形成系統(tǒng)的知識框架,引領(lǐng)學(xué)生踏上算法學(xué)習(xí)之路,遞進式地培養(yǎng)學(xué)生的計算思維。
蒼山點題
課程研究日漸深化到一線教學(xué)具體的策略內(nèi)容,這是很重要的發(fā)展環(huán)節(jié),是值得各地大力推進的課程發(fā)展措施。
第一篇文章,介紹了如何通過中小學(xué)編程教育的貫通培養(yǎng)進行編程教育的行動研究,本項目的研究可有效彌補課堂教學(xué)培養(yǎng)目標(biāo)單一和深度不足的問題,能夠針對創(chuàng)新人才進行可持續(xù)培養(yǎng),并具有一定的社會意義,具有較強的推廣應(yīng)用價值,主要包括以下幾個方面:本研究的成果可以為本地甚至全國提供編程貫通教育的培養(yǎng)模式,改善編程教育起步晚、學(xué)習(xí)效果不明顯等現(xiàn)狀;本研究開發(fā)的編程課程體系、校本教材等可以豐富已有的編程課程資源,為編程教育領(lǐng)域提供參考資源;通過本研究可以在本地推廣編程教育,可以在很大程度上提高學(xué)生的計算思維和數(shù)字化學(xué)習(xí)與創(chuàng)新能力,提高信息技術(shù)核心素養(yǎng)和解決實際問題的能力;另外,本研究還可以用來探索建立“雙腦”培育發(fā)展的新模式,建設(shè)中小學(xué)創(chuàng)新人才免費培養(yǎng)的教育基地等。
第二篇文章,介紹了在高中信息技術(shù)新教材的編程和算法教學(xué)中,如何結(jié)合教材資源和信息學(xué)競賽輔導(dǎo)資源,圍繞有趣的數(shù)字問題,設(shè)計一系列遞進式學(xué)習(xí)活動,來破解教材難點。在項目式學(xué)習(xí)中,從解決一個簡單的問題出發(fā),學(xué)生產(chǎn)生用計算機解決問題的興趣,隨著活動的持續(xù)進行,學(xué)生逐漸找到編程解決問題的“感覺”,最終能夠利用合理的算法解決問題,在活動過程中遞進式地培養(yǎng)了計算思維。
實際上,很多一線教師在奧賽輔導(dǎo)、科技社團、公益科普等活動中都有突出貢獻和顯著成果,期待大家總結(jié)、挖掘可推廣的成果與大家分享。