謝永盛 張 超 王 璐 蘇 柏 苑井孝
(西北民族大學,甘肅 蘭州 730124)
2017年《中國STEM教育白皮書》[1]的發布,標志著中國STEM教育開始走向全面、專業、成熟的發展道路。教師可通過項目式學習的方式并伴有創設情境、多人協作、探究學習等教學手段開展某個教學環節,讓學習者從生活中學習,將知識情景化,學會利用科學、技術、工程和數學等學科相互關聯的知識解決問題,提高學生的STEM素養[2]。山東省和浙江省于2017年相繼出臺了信息技術課程改革方案,在PYPL2019年8月份編程語言排行榜上,Python位居第一名,簡單易學、豐富的資源庫、跨平臺、可擴展成為了它的代名詞。
1.情境引入
小明同學周末想要乘公交車去博物館,他借助電子地圖查詢去博物館的公交路線,那么他會選用哪種乘車路線呢?再者,某人將自己的密碼忘記了,密碼可能是生日也可能是電話號碼。那么如果要解決上面的問題,我們就要把問題的所有可能解都一一列舉出來,并按照問題要求的條件逐個判斷每個答案是否是正確的解,這就是枚舉算法。
STEM小貼士:從生活中發現科學,將知識情景化,這大大提高了學生對程序語言的學習興趣。
2.項目指導
枚舉算法又叫窮舉法,方法簡單但很實用,十分適合初學者掌握理解。本項目學習過程中,學習小組可以參考以下活動建議進行合作學習和交流分享。

表1 “用枚舉算法尋找問題多解”微項目活動建議
按照項目所學內容可分為三個模塊,即將同學們分成2個小組(視班級人數情況而定可分為4個小組)。每個小組主要負責一個模塊,但也要參與到其它小組負責的模塊內容上來。
STEM小貼士:不同的小組根據自己負責的模塊內容設計不同的解決方案,這有助于同學們養成善于發現、大膽實踐的良好編程習慣。
1.“拍7”游戲
A組同學將邀請其他小組共同參與到這個游戲中。游戲規則是:把從1開始的自然數中含“7”的數標作“明7”;把不含“7”且是“7”的倍數的數稱作“暗7”。從1開始輪流報數,輪到報“明7”或“暗7”的人,不能出聲,只拍一下手。
假設一起游戲的有33人,由A組的同學記錄3輪報數后拍手的數據。第一輪數據情況:7、14、17、21、27、28,小組成員分工完成第二、三輪的數據記錄。
2.稱量食鹽
C組同學幫助實驗室老師稱量100克食鹽,現有足量的1克、2克、5克、10克砝碼,共允許取用40枚砝碼,要求每種砝碼至少使用一枚,共有多少種稱量方案?
老師感受到同學們的苦惱,便順著將枚舉算法再講解了一遍并通過Python程序語言給同學們以啟發。這個過程需要每個小組的參與,動手敲代碼并將本小組的運行結果通過教學平臺呈現給大家。
STEM小貼士:學生敲代碼的過程既鍛煉了動手能力,又進一步地感受邏輯思維解決問題的魅力。
1.快速尋找有規律的數據——拍“7”游戲
(1)確定枚舉的對象、范圍和條件。假定報數達到100時游戲結束,根據“拍7”游戲的游戲規則,確定枚舉范圍是1-100的自然數,設定一個變量作為枚舉對象。枚舉1-100的程序基本結構:n=100for i in range(1,n+1)。
在程序中,循環結構通過range()函數控制枚舉范圍。接下來,通過增加判定條件以確定“明7”和“暗7”:“7”in str(i)or i%7==0。
(2)編寫程序判斷“明7”和“暗7”。判斷“明7”的條件:1-100的自然數中含“7”的數即“明7”,需要利用選擇結構語句添加限定條件,如圖3所示;判斷“暗7”的條件:1-100的自然數中能被7整除的數,增加條件即可同時判斷“明7”和“暗7”,需要利用if語句添加條件:if “7” in str(i)or i%7==0。
在程序中:%是取余運算,運算結果為兩數相除所得的余數;借助邏輯運算符“or”可以判斷多種情況。
STEM小貼士:數學是編程中學習邏輯算法的核心,將數學應用到項目學習工程上是解決實際問題的關鍵。
2.一一列舉可行的解決方案——稱量食鹽
(1)分析問題,確定枚舉范圍。枚舉對象可以確定為4種質量的砝碼。每種砝碼至少使用1枚,因此數量都不小于1,所取一種砝碼數量要小于等于40枚且質量之和要小于等于100克,以下列出大概取值范圍。用a表示10克砝碼的枚數,大概取值范圍是1-10;用b表示5克砝碼的枚數,大概取值范圍是1-20;用c表示2克砝碼的枚數,大概取值范圍是1-40;用d表示1克砝碼的枚數,大概取值范圍是1-40。
(2)確定枚舉條件,設計枚舉程序。各種砝碼共計40枚,所以枚舉條件1為a+b+c+d==40;總質量100克,所以枚舉條件2為10×a+5×b+2×c+d==100。程序如圖1所示。
本節課教師通過項目式學習的方式開展教學,借助“拍7”游戲和稱量食鹽三個生活場景吸引學生學習興趣,融合數學學科知識掌握了Python程序中的邏輯框架。借助STEM教育理念培養學生的思維能力和動手能力達到預期的教學目標。
在STEM教學理論的指導下,利用編程去優化并解決生活中的問題,讓學生學習知識的能力在實踐中得到更好的鍛煉,逐漸養成STEM素養。數字時代下的教育教學正是需要教師們不斷學習新知識,提升自己的教學設計能力,學會利用STEM素養去管理課堂、優化課堂,讓師生均能獲得知識和能力提升的雙贏。

圖1 稱量食鹽方案程序