吳加明
編程對于廣大中學生來說無疑是塊硬骨頭,如何做到因材施教、有效教學,這考驗著一線信息技術教師自身的專業知識儲備、教材文本研讀、教學案設計、教學組織實施等教學基本功和綜合素養。故事是人類文化的基本元素和重要標識,具有獨特的影響力和感召力。故事和編程兩個看似毫不相關的詞語,讓人聯想到:一個情緒化、張揚,一個理性、內斂;一個講究氣氛渲染、情節沖突,一個需要邏輯思維、思路嚴謹。筆者在教學必修模塊1《數據與計算》的“算法與程序實現”時,對“分支結構與if語句”有關項目學習活動的教學環節嘗試了“故事化”情境設計,力圖做到形式與內容的完美統一。
● 故事情境:古城尋寶
尋寶是個比較經典的話題,總給人一種神秘感,其結果的不確定性會給人帶來無限的遐想,讓人躍躍欲試。筆者所在城市泉州,是我國歷史文化名城之一,歷史悠久,享有“海上絲綢之路起點”“東亞文化之都”“世界宗教博物館”等美譽。其地方文化特色凸顯,人文底蘊深厚,文物及旅游景點眾多,有特色街巷,寺院廟宇星羅棋布。把項目活動設計放在有濃郁閩南傳統特色古城這一空間背景下,恰如其分,項目以“古城尋寶”為題,在項目中設計了三個主題活動,主題名稱分別是體溫測量、通關密碼和探尋寶物,使項目有較完整的故事結構,既有劇情的層層推進,又有知識內容的螺旋上升,形成明暗兩條主線鏈條的有機融合。
● 活動環節1:體溫測量
本環節讓學生通過編程模擬解決實際生活中的一個場景問題,了解分支結構在日常學習生活中應用的普遍性和廣泛性。當今的智能設備,極大地方便了我們的生活,其智能最直觀初淺的理解就在“如果…就…”的簡單邏輯里,智能機器需要按預設的程序對各種情況做出判斷,并做出相應的反應。例如智能空調,如果室內溫度高于32度,就自動打開空調。又如,使用無人機空中偵察古城尋寶路線,如果無人機接收到指令,就會做出相應的動作。可以看出條件判斷非常重要。理解并掌握Python語言的if分支語句的格式與應用,這是整個項目活動完成后需要達成的最低學習要求,在此過程中,還需要了解與條件密不可分的關系運算、關系表達式。同時,進一步領會體悟Python語言的書寫特點、基礎知識、集成開發環境及調試流程等。
知識要點:if語句及應用、關系運算。
活動要求:在新冠疫情防控常態化背景下,我們進入公共場所,如車站、商場、電影院、景點等,都需要出示健康碼,并接受現場測量體溫等,體溫正常者(不高于37.3攝氏度),才被允許入內,體溫異常者,將被拒絕。請同學們利用Python編寫一段程序,實現功能:①輸入一個體溫數據。②對輸入的數據進行比較判斷,如果小于或等于37.2,輸出“體溫正常”,否則,輸出“體溫異常”。③結束。
知識連接:
(1)if語句,其書寫格式如下:
if 條件:
語句組1
else:
語句組2
語句組3
Python用縮進來標明成塊的代碼,體現語句之間的上下級關系,對縮進有很嚴格的要求,同級別的程序行要縮進并對齊。例如,以上程序中if與else要對齊,“語句組1”到“語句組2”要縮進并對齊。條件后面的冒號也是if語句的組成部分,不可或缺。
分支結構程序的功能是:
①如果條件表達式成立(值是真True),那么執行“語句組1”的程序段。②否則(值是假False),就執行“語句組2”。③不論條件成立與否,判斷完成后都繼續執行“語句組3”。因為“語句組3”與else對齊。
(2)關系運算。
分支語句中的條件(條件表達式),一般稱為關系表達式。關系表達式是用關系運算符連接起來的式子。常用的關系運算符:==、!=、>、<、≥、≤。當關系表達式成立時,值為真(True);當關系表達式不成立時,值為假(False)。邏輯型數據有且僅有“真”和“假”兩個值,關系運算的結果一定是邏輯型。
● 活動環節2:通關密碼
該活動不管是故事情節方面還是知識內容方面,都是在“活動環節1”基礎上的自然演進,設計合理,將條件判斷從單一增加到兩個,從而引入邏輯運算的學習內容。學生對用戶名和密碼問題有濃厚的興趣,可以快速激發學習的積極性和主動性,用戶名和密碼也是人們互聯網生活方式必不可少的,如學生進入“安全平臺”“綜合素質信息管理平臺”等都需要正確的用戶名和密碼。本活動進一步通過問題引領,大膽猜測,小心驗證,初步構建從生活實例中提煉形成程序設計語言能接受處理的算法模型,并做到實踐操作、編程實現。
知識技能:邏輯運算。
活動要求:通過第一關的體溫測量后,現在我們來到了古城門,進入第二關,需要輸入通關密碼,即輸入用戶名和密碼。請同學們利用Python編寫程序,實現功能:①輸入用戶名。②輸入密碼。③對輸入的用戶名和密碼與預先設定的值(每個同學用自己的姓名作為用戶名,用“202011+座號”作為密碼)進行比較,當二者同時正確時,輸出“歡迎來到古城!”,否則,輸出“對不起,輸入有誤,無法進入!”。④結束。
知識連接:邏輯運算——and、or、not。
邏輯運算符一般和關系運算符結合使用,如10>6 and 15.6>20,10>6是成立的,結果為True(真),15.6>20不成立,結果為False(假),所以整個表達式的結果為False,即不成立。看一個生活實例:手機要上網,最起碼需要滿足兩個條件,一是保證手機電量充足,二是要有網絡信號。兩個條件必須同時具備,這種情況就是邏輯與運算。再如中考體育的球類項目,大家可以在籃球、足球和排球中三選一,這就是邏輯或運算。
● 活動環節3:探尋寶物
能夠從問題本身或業務邏輯提煉出解決方案,并且用代碼去實現,編程教育的實質內涵是:現實世界的問題→抽象出解決方案/建模→編程語言表達。編寫代碼只是最后一步,前面兩個步驟更考驗學習者的底層思維能力。本活動是前面內容的延伸,是整個“古城尋寶”項目活動的終極目標。對應的主要知識要點是隨機函數和多分支語句,難度中等。為了模擬現實世界中尋寶的隨機性、不確定性,這里需要導入random模塊來產生一個隨機數,這也是編程教育繞不開的一個話題。例如,抽獎小程序、課堂叫號提問程序、義務教育入學電腦派位軟件等,其基本原理都離不開隨機數這個概念。
知識技能:導入模塊、隨機數和多分支結構。
活動要求:進入古城后,開始探尋寶物,寶物分別有寶劍、盔甲、金幣等,我們統一給每樣寶物做個編號并約定,1代表寶劍,2代表盔甲,3代表金幣,0代表空。請同學們利用Python編寫程序,實現以下功能:①在0~3四個數字中隨機產生一個整數。②對獲得的隨機數進行比對,并輸出編號所代表的寶物名稱。如隨機數是1,則輸出“恭喜你!你尋到的寶物是:寶劍”。③結束。
知識連接:
(1)導入模塊。
Python提供了強大的模塊支持,不僅Python標準庫中包含了大量的模塊,還有大量的第三方模塊,通過模塊可以極大地提高開發效率。例如,導入random模塊,用于生成隨機數,可以寫成:import random。
(2)隨機模塊。
random模塊,用來利用系統產生隨機數,應用隨機函數是編程中的常見現象。
①random模塊的choice函數,作用是返回一個列表,元組或字符串的隨機項,如random.choice([0,1,2,3])#得到0~3這四個數字中的隨機一個數。
②random.random()#生成0~1的隨機浮點數,較常用,可以做變形處理。
(3)多分支結構書寫格式。
if 條件1:
語句組1
elif 條件2:
語句組2
……
elif 條件n:
語句組n
else:
語句組n+1
故事化教學,甚至是角色扮演教學在文科學科的教學活動中較為常見,可以讓學生在較短的時間內快速融入預設的學習情境。“古城尋寶”項目活動通過巧妙構思,用故事化設計編程教育,做到相關活動由易到難、由淺入深,環環相扣,一氣呵成。通過嘗試創新教學環節方式,讓“以學生為中心”“追求理解的教學設計”等教學理念有效落地,生根發芽。
蒼山點題
程序設計教學首先要考慮趣味性,尤其是在學習的起始階段,培養學生的興趣,同時也能降低算法理解的難度。因此,選題要盡可能聯系學生的生活實際,提高學生的認同感。這也是近期選題我們的一大宗旨。
第一篇文章,把項目學習與趣味編程結合。在程序設計教學中允許學生“眼高手低”,主要在培養學生的計算思維上下功夫,而不是在編寫代碼操作上多使力。在學習過程中建議學生在相關代碼上進行修改,降低代碼編寫的難度,加快輸入速度,提高學習的成就感。受課時和上課周期等現實因素的制約,在進行項目設計時盡量選擇“短平快”的“微項目”開展教學活動,增加教學的靈活性,提高了課堂的實效。
第二篇文章,教師開始設計的是項目學習,因為故事化過于強大,相對弱化了項目的創意設計、作品生成,所以我們建議其改成了故事化教學,讓故事情境、情節與學習活動環節相一致,更好地突出了教學設計的特色。
另外,隨著項目學習在課堂中的廣泛使用,我們要防止項目的泛濫,對項目學習的特征要不斷校準,至少不能讓項目學習失去個性化的創意、規劃、設計及作品的生成與交流,即使作品是一個結論、觀點,也是有益的。