陳治干
(永泰縣第二中學,福建 永泰 350700)
《普通高中信息技術課程標準(2017 年版2020年修訂)》明確提出,普通高中信息技術課程要以培養(yǎng)學生的計算思維作為學科核心素養(yǎng)之一,提高學生用計算機能處理的方式分析問題、處理問題的能力,并把這種能力遷移到各個學科的學習中去,[1]改進學習方式,提高學習效果。以“發(fā)現(xiàn)問題—分析問題—解決問題”為特征的編程教學,是實現(xiàn)計算思維的有效手段。
在高中信息技術課程中,Python 編程設計語言是目前最受歡迎的編程設計語言,因其“重算法輕語法”的特點,成為一門很容易上手的編程語言,深得廣大學習者的喜愛。其特點是:強調算法為主,語法為輔,側重分析問題、解決問題的過程與方法。Python 已經(jīng)內置了很多常見功能和第三方庫,我們只需要用import 關鍵字導入相關庫,在程序中調用庫中的函數(shù),就能實現(xiàn)程序的強大功能。因此,Python 的學習對于中學生計算思維的發(fā)展是有很大促進作用的,這也是現(xiàn)行普通高中信息技術課程教材選擇Python 作為編程語言的原因之一。
Python 程序設計語言雖然比較容易入門,但對于普通高中學生,特別是“零基礎”的學生,還是有著比較大的困難。Python 程序設計語言對沒有學習過編程的“零基礎”學生,使他們快速理解程序設計原理,掌握代碼的語法結構和邏輯結構,特別是培養(yǎng)他們從直觀形象思維提到升到計算機編程所需的抽象邏輯思維,快速叩開編程的大門。
當前疫情防控轉入常態(tài)化,體溫監(jiān)控是第一道防線。某地新冠肺炎疫情防控指揮部規(guī)定,體溫大于等于37.2℃不能入校上課;低于37.2℃,體溫正常,可以進入校園。這是兩個條件產(chǎn)生兩種不同結果的問題,其結果取決于體溫的判斷,屬于計算思維的范疇。我們可以引導學生分析問題,設計算法,用Python 程序設計語言的分支結構語句來解決(代碼如圖1)。在實際編程的過程中,學生卻被兩個問題給難住了,問題一、第二行和第四行的冒號,問題二、第三行和第五行,要右移4 個字符。如果教師強行讓學生死記,可以比較快地解決問題,但從學生的長遠發(fā)展來說,是一大隱患,因為這個問題才是Python 程序設計語言的精華所在。Python 的類和塊,不像C 語言那樣用{ }來區(qū)分,而是通過冒號和下一行的右移4 個字符來表示上下行代碼塊的從屬關系,是初學者難以逾越的難點。筆者用了圖文標識和實際操作的方式并故意出錯,引導學生觀察運行出錯時的情形程序會彈出對話框,(全英文語句提示,這又是一個繞不開的難點,下文再討論),引導學生修改。在現(xiàn)行滬科版高中信息技術教材中,分支結構起到承上啟下的作用,它上承賦值結構,下接循環(huán)結構,解決好這個冒號和縮進問題,可為后面的教學打好基礎,掃清障礙。
圖1
Python 雖然簡單易學,但其所涉及的知識面還是比較廣的,有些知識點比較難理解,比如運行報錯的提示,學生常常感到無法應對。教師把零散的學習資源進行有效整合,并以動畫、PPT 文件、中文文檔等,提供給學生,幫助理解相關知識,滿足不同學生的學習需求,增強學生的學習信心。
在教學過程中,代碼出錯或者語法錯誤,運行調試時Python 程序設計語言會給出相應提示信息,可是全部是英文,而且單詞也并不是日常用語,就現(xiàn)有學生的英文水平還不足以理解。
[例1]Print(a)程序代碼運行后報錯:“Name Error:name′a′is not defined”;
Python 作為編程語言,其語法的邏輯性還是有一定難度的,讓尚在入門階段的“零基礎”學生有點“心有余而力不足”。教師要先采用學生感興趣的實例來引導他們體驗成功,引起他們的學習興趣。俗話說,興趣是最好的老師,是進行一切活動的強烈的內在的驅動力,有了興趣才能夠產(chǎn)生強烈的求知欲望。
[例3]某景區(qū)售票規(guī)則,成年人(15 歲到60 歲)全票100 元,少年(10 歲到14 歲)半票50 元,兒童(小于10 歲)和老年人(大于60 歲)免費,要求學生用Python程序設計語言為景區(qū)編寫一個程序。筆者引導學生分析:這個以年齡段為條件的收費問題,不同的年齡段收費不同,符合Python 程序設計與語言分支結構的特點,因此可以用多分支語句的程序來實現(xiàn)問題的求解。(代碼如圖2)教學時,筆者把相關的基本知識點通過文檔、微課等形式作為學習幫助包發(fā)給學生,供他們參考;重點引導學生進行以計算思維為特征的抽象邏輯思維的方式分析問題,設計算法,然后用Python語言來實現(xiàn)算法。學生在看到成果后,教師再給學生簡單介紹語法,開發(fā)他們基于計算的抽象思維。這樣的教學方法,讓學生樂意接受,避免產(chǎn)生厭學心理。
圖2
高中學生學習Python 程序設計語言并不是用來開發(fā)軟件,而是為了提升信息素養(yǎng),發(fā)展以機器計算和抽象邏輯思維為特征的計算思維,學會利用信息技術來分析問題、解決問題,提高利用信息技術來思考問題、解決問題的能力。所以,首要問題就是先培養(yǎng)學習興趣,然后再強化“抽象”思維,通過實例分析培養(yǎng)算法意識。
在課堂教學過程中,發(fā)揮學生的主體作用,教師作為輔助者和引導者,學生在理解教師課前分發(fā)的基礎知識和核心問題的基礎上,根據(jù)自身的既有知識和體驗進行獨立分析。例如,要求學生用Python 程序設計語言編寫程序,輸出“九九乘法表”,教師先引導學生分析問題,找出規(guī)律:每向右移動一列,被乘數(shù)在前一列的基礎上加1,乘數(shù)從1 到9 每右移一列減1。根據(jù)多數(shù)學生的共性問題進行集體教學,并適時組織學生進行小組合作探究,并將小組探究結果,以及探究中設計出的算法進行共享,分析討論,不斷優(yōu)化算法,最后用Python 程序設計語言進行實踐,驗證算法。(參考代碼如圖3)
圖3
計算思維背景下的高中信息技術教學目標不能僅滿足于教會學生使用Python 編程這一基本要求,而要以學生對于信息技術的理解和應用為長遠任務,將計算思維這一核心素養(yǎng)的提升作為教學的最終目標,使學生能夠從抽象、算法、歸納、分析、評價等維度中獲得思維能力的提升,從而促進學生的全面發(fā)展。[2]
筆者在Python 程序設計語言編程教學時,堅持挖掘學生的潛能,通過積極創(chuàng)造條件,為學生提供重在培養(yǎng)抽象邏輯思維能力的情境和資源,訓練拓展思維,讓學生敢于把Python 技巧運用得活靈活現(xiàn),不斷創(chuàng)新,收到獨特的效果。比如,要求用編程來解決“推算某年某月是星期幾”這個問題,筆者首先引導學生分析問題,設計相應的算法,各小組的學生展開了熱烈討論,想出了各種辦法,其中第三小組的想法比較成熟,筆者把他們的成果通過多媒體廣播軟件共享給全班同學,學生編寫的程序代碼如圖4。這樣問題是解決了,但這只是實現(xiàn)了算法,并非最佳方案,如果教師的教學滿足于此,那對學生的長遠發(fā)展是極其不利的。
圖4
通過觀察發(fā)現(xiàn):在上述算法中,用if 語句每增加一個選擇項,代碼就多了2 行。教師逐步引導學生深入分析:星期值除了“星期日”,后一個“星期幾”只比前一個“星期幾”多1,如果采用Python 的分支結構語句中嵌套列表語句,代碼就變得很簡單多了,程序的運行效率得到極大的提高。(程序代碼如圖5)
圖5
如果只是作為解決問題,這時已經(jīng)完全可以了。但對于學生計算思維能力的培養(yǎng),是不夠的。它是一個長期而又極具挑戰(zhàn)性的工程,要從不同角度、不同側面,多方位挖掘學生的創(chuàng)新潛力才行。于是,筆者在肯定學生取得突破的同時,又繼續(xù)引導學生深入分析思考,最終實現(xiàn)創(chuàng)新性的方案。(程序代碼如圖6)這才是編程的高級境界,通過優(yōu)化程序的實踐,提升學生應用計算思維分析問題,解決問題的能力,養(yǎng)成嚴謹治學的良好習慣,提升學科核心素養(yǎng)。
圖6
從表面上看,學生在編程過程中,只是把16 行代碼精簡到4 行,程序運行時間縮短0.46 秒,運行效率得到了較大的提高,讓學生對相關命令的掌握更加嫻熟,思維也更加快捷,直擊事件的本質。而更重要的是讓學生敢于打破思維慣性,大膽創(chuàng)新,為將來在科研領域中敢做別人不敢做的事、想出他人還沒想出的解決問題的策略打下基礎,這才是我們的教學目標。
總而言之,在學科核心素養(yǎng)背景下,解決“零基礎”高中生學習Python 程序設計語言的入門問題,可以從幫助學生解決Python 程序設計語言的語法、英文提示、設計算法、編寫代碼入手等問題,培養(yǎng)算法意識,興趣,提升抽象邏輯思維能力。