謝永盛 張 超 王 璐 蘇 柏 苑井孝
(西北民族大學,甘肅 蘭州 730124)
近些年STEM教育在國內開展的如火如荼,不少國內學者、研究人員針對STEM教育進行了不同程度上的探究,從理論分析到實踐驗證。STEM教育強調通過跨學科整合,這一集合,不是課程的簡單組合,而是把學生學習到的零碎知識與項目工程轉變成一個探究世界相互聯系的不同側面的過程,強調學生在“雜亂無章”的學習情境中提升設計能力、合作能力、問題解決能力和實踐創新能力[1]。枚舉算法起源于原始的計數方法,即數數。其本質是一種列舉式搜索的算法,常常借助循環嵌套分支結構和計算機的超強運算能力,一一驗證大量可能的答案。
某人將自己的旅行箱密碼忘記了,密碼可能是生日也可能是電話號碼。同學們列出的多種情況促使當事人想起他的密碼是一個三位自然數,并且密碼個位數是8,其它位含有1但是不能確定在哪個位置。那么如果要解決上面的問題,我們就要把問題的所有可能解都一一列舉出來,并按照問題要求的條件逐個判斷每個答案是否是正確的解。
按照項目所學內容可將同學們分成若干組,本項目學習過程中,學習小組可以參考以下活動建議進行合作學習和交流分享。

表1 項目活動建議

圖1 找回密碼程序
運行結果:108、118、128、138、148、158、168、178、198、218、318、418、518、618、718、818、918。
教師可根據學生在課堂上的學習情況開展下一項教學任務。在這個項目中學生們將借助Python程序語言和數學知識來解決問題。Python是一種面向對象、解釋型計算機程序設計語言,由Guido van Rossum(吉多·范羅蘇姆)于1989年發明,第一個公開發行版發行于1991年。它是一個開源語言,擁有大量的庫,可以高效地開發各種應用程序。特點:簡單、高級、面向對象、可擴展性、免費開源、可移植性、豐富的庫、可嵌入性[2]。這個過程需要每個小組成員的參與,動手敲代碼并將本小組的運行結果通過教學平臺分享給大家。

圖2 尋找三位數中的水仙花數程序
運行結果:153、370、371、407。
在程序中:通過取余運算%判斷個位數。如x%10==8成立,則可判斷個位數為8;借助邏輯運算符“and”可以判斷復雜情況;可使用整除運算(//是整除運算符號)取得該自然數的前兩位數,利用in判斷前兩位中是否有1。程序,見圖1。
本節課教師通過項目式學習的方式開展教學,借助找回密碼的生活場景吸引學生學習興趣,融合數學學科知識并通過Python程序語言掌握了枚舉算法中的邏輯框架。借助STEM教育理念培養學生的思維能力和動手能力達到預期的教學目標。
通過上一個項目——找回忘記的密碼的介紹,我們再來感受下尋找水仙花數的教學過程。水仙花數是各位數字的立方之和等于該本身的數,如153=13+53+33。現讓求出所有三位數的水仙花數。
我們根據已有的知識判斷出水仙花數的特征和所給問題的數字范圍,對該項目逐一給出解決方案。確定枚舉對象的取值范圍:用i表示該三位數,foriinrange(100,1000);一個三位數的百位上的數用整除的計算方式獲
得:用a表示,a=i//100;十位上的數用整除和求余兩種計算方式獲得:用b表示,b=i//10%10;個位上的數用求余的計算方式獲得:用b表示,c=i%10。
要求水仙花數等于各位數字的立方之和,所以枚舉條件是i==a**3+b**3+c**3,程序,見圖2。
在STEM教學理論的指導下,利用算法和編程去優化并解決生活中的問題,這不僅有效提高學生對數學和編程學習興趣的提升而且也為國內STEM教育的實踐探索提供可以研究的視角。人工智能和大數據充斥著生活中的各個方面,從生活中學習再回歸到生活中,讓學生真正體會到編程的無限樂趣。同時在學習過程中,切實地提升了學生綜合運用知識的能力和解決問題的創新能力,逐漸養成STEM素養[3]。