孫秀峰
《普通高中信息技術課程標準(2017年版)》(以下簡稱《標準》)要求普通高中信息技術課程內容要緊扣數(shù)據(jù)、算法、信息系統(tǒng)和信息社會等學科大概念,培養(yǎng)學生信息意識、計算思維、數(shù)字化學習與創(chuàng)新、信息社會責任。計算思維是指個體運用計算機科學領域的思想方法,在形成問題解決方案的過程中產生的一系列思維活動,運用合理的算法形成解決問題的方案,并遷移到與之相關的其他問題的解決中?!稑藴省分袑Α氨匦拚n程模塊1:數(shù)據(jù)與計算”中的程序設計的要求是:“掌握一種程序設計語言的基本知識,使用程序設計語言實現(xiàn)簡單算法。通過解決實際問題,體驗程序設計的基本流程,感受算法的效率,掌握程序調試與運行的方法?!边@就明確了在這一輪課改中,普通高中信息技術課程需要進行程序設計語言的教學。在眾多程序設計的語言中,Python作為一種面向對象的解釋型計算機程序語言,具有簡單、免費、開源、可移植性的特點,在信息技術新教材的編寫時倍受青睞,成為首選。
在2003版課標實施的十多年里,筆者所在地區(qū)的普通高中信息技術選修課程沒有選擇“算法與程序設計”模塊,很多高中信息技術教師也十多年沒有教授過程序設計,因此,為了更好地學習和使用新教材,筆者所在地區(qū)組織了全體高中信息技術教師Python語言線上培訓,在培訓時一道關于循環(huán)結構的填空題引起了大家的熱議。
● 試題及參考答案分析
題目如圖1所示,這是一道經典的循環(huán)結構程序題。在分析本題答案之前先要了解range()和print()兩個函數(shù)相關的參數(shù)含義。函數(shù)Range()格式:range(begin,end,step),如下頁表1所示。函數(shù)Print()格式:print(value,…,ep='',end='\n',file=sys.stdout, flush=False),如下頁表2所示。
參考答案為:①1,101;②s+i;③s。分析:①空需要填寫的內容為變量i從1窮舉到100,故填1,101;根據(jù)②空后面的提示,將變量i的值累加到累加器s中,故填s+i;③空就是要填輸出累加器s的值,故填s。
本題的參考答案是教師和學生們很容易思考到的,也符合常規(guī)思維,但由于本題設計的填空關聯(lián)度非常高、Python語言的range()函數(shù)的參數(shù)可省略和print()函數(shù)的格式靈活性等特點,教師們經過討論發(fā)現(xiàn)本題除了參考答案外還有許多解,答案不是唯一的,無論是筆試還是機試,教師在批改作業(yè)時都會遇到麻煩。
● 多解詳細分析
解法1:①空填“1,100,1”或“101”,②、③空不變。
分析:range(1,101,1)的步長為1,生成1,2,3,…,100的序列,range(101)表示從0開始計數(shù),生成0,1,2,3,…,100的序列,循環(huán)執(zhí)行后變量s中保存的結果是從1到100的和。range(101)多執(zhí)行一次循環(huán),結果不變;range(1,101,1)跟range(1,101)執(zhí)行循環(huán)次數(shù)是一樣的。
解法2:①空填“1,100”或“100”,②空不變,③空填s+100。
分析:range(1,100)生成1,2,3,…,99的序列,range(100)生成0,1,2,3,…,99的序列,循環(huán)執(zhí)行后變量s中保存結果是從1到99的和,最后通過輸出時s變量+100,如此也能求出1到100的和。當然,順著這種填法,若①空填“99”、③空填s+100+99,輸出結果也是1到100的和,如此思路還會填出多種組合的答案來,但缺少理由認為這些答案就是錯誤的,只是沒有充分利用for語句功能而已。
解法3:①空填“100,0,-1”,②、③空不變。
分析:range()函數(shù)的步長參數(shù)可以為負數(shù),生成的序列為倒序。例如,range(100,0,-1)生成從100至1、間隔為1的連續(xù)遞減的等差數(shù)列序列100,99,98,…,2,1,從而求出從100到1的和。有時我們逆向思考,采用倒序也是解決問題的好方法。
解法4:①、②空不變,③空填“'和=',s”或“"和=",s”等。
分析:print()函數(shù)可輸出多個value,value可以是數(shù)值也可以是字符串等,若加上字符串可清晰地顯示輸出的值是什么的結果,如此解輸出為“和=5050”,結果指向性更明確。因為字符串的值可以任意選取,以及print()函數(shù)可以設置“sep=''”等多個參數(shù),所以③空還能填出許多種答案,如print(s,sep='')等。
解法5:①、②空不變,③空填“5050”。
分析:高斯巧妙地用(1+100)×50很快就把本題結果計算出來了,如果有學生在③空就填“5050”,是正確還是錯誤呢?因為本題是計算1+2+3+…+100的和,程序不需要輸入,程序結果是什么也是已知的,程序運行后結果顯示也是正確的,如此填寫很難確定是對還是錯。當然,如果學生要這樣填,只是本題程序運行結果顯示正確,但并沒有充分理解累加器s的作用,也沒有理解程序設計的基本流程,不利于培養(yǎng)計算思維,也不利于分析和理解算法,所以教師在教學過程中需要加強算法引導防止此類現(xiàn)象發(fā)生。
● 試題修改及解析
由于在設計本題的題干時,填空的限制條件相對寬松,導致多解,綜上分析,為使答案具有確定性,從而更好地培養(yǎng)學生的計算思維和編程能力,也方便教師講解此題和批改作業(yè),可進行如下幾種修改。
修改1:若填寫參考答案的結果,可增加題干限制性說明(如下頁圖2)。
解析:增加兩處限制說明,學生解題時方向清楚,答案也就明確,考查學生的“雙基”。
修改2:調整填空項(如下頁圖3)。
解析:將變量i的取值范圍和輸出固定,這樣設計的填空既考查了學生Python語句的基本知識,又訓練了學生的計算思維,培養(yǎng)了學生分析問題的能力。
修改3:設計成一道單項選擇題,或設計成一道多項選擇題。
設計成單項選擇題時,選項可設為:
A. ①1,101? ②s+i? ③s
B. ①1,100? ②s+i? ?③s
C. ①1,100? ②+i? ?③s
D. ①1,101,1 ②s+i? ③i
設計成多項選擇題時,選項可設為:
A. ①1,101? ②s+i? ③s
B. ①101? ?②s+i? ③s=,s
C. ①100,0,-1 ②s+i? ③s
D. ①100? ? ②s+i? ③s
多項選擇題四個選項中有A、B、C為正確選項,若題干改為選擇一個錯誤選項,那本題就變成一道單項選擇題。
解析:由填空題改為選擇題既考查了學生掌握相關知識點的熟練程度,也考查了學生的必備能力。
● 設計試題的思考
1.研究課程標準
課程標準是新課程改革的“魂”?!稑藴省访鞔_了“高中信息技術學業(yè)評價一般包括紙筆測試、上機測試等方式”的評價方式,紙筆測試和上機測試各有所長,適合不同的評價內容和目標,應相互補充、綜合運用?!稑藴省分赋觯杭埞P測試的效率較高,在設計測試試卷時,要適度設置和增加要求學生通過理解和探究來解決的開放性題目,如問題解決分析等,以拓展紙筆測試在評價內容和評價目標等方面的廣度和深度。上機測試可以評價學生使用技術工具的熟練程度,能夠考查學生利用信息技術解決問題的能力。本輪改革沒有考試大綱,只有通過不斷地學習《標準》、學習不同出版社的新教材,才能掌握新課程改革的基本理念,才能科學地設計每一道題。
2.儲備知識
“要給學生一杯水,教師要有一桶水”,同理,“要想出好一道題,需要儲備十道題”。例如Python的知識儲備,教師們可通過自學或MOOC、直播課學習,掌握語法規(guī)則,提升自身的編程能力和編程技巧,遇到問題時可在教研組或主備課活動時跟同事們研討,也可通過QQ、微信群及時交流探討,以達到熟練掌握和深刻理解的程度。知識儲備豐富了,才能夠設計出新穎、巧妙、表述嚴謹?shù)脑囶}。