呂寬武 浙江省龍游中學
筆者所在區域舉行的高中信息技術課堂教學評比活動由上課和說課兩部分組成。此次活動是為了交流各縣信息技術教學的新思路,因此采取同題異構的教學方式。但是筆者在接到《編程處理數據》這個課題之后,遇到了兩個難題:其一,基于新教材的備課資料“一窮二白”;其二,時間緊(9天)、要求高(項目化學習),備課難度大。
浙教版高中信息技術教材將本課內容分為三塊:①利用pandas模塊處理數據,主要內容有Series和DataFrame兩種數據結構,以及它們的常用屬性和常用函數;②利用matplotlib模塊繪圖,主要內容是學習常用繪圖函數;③利用Python分析數據實踐。教師用書上建議先講授pandas的兩種數據結構Series和DataFrame,然后引導學生參照教材例題進行實踐探究,但這種教法作為比賽課會不會太常規而提不起學生的興趣呢?
在此前市教研員開展的相關培訓中,筆者受到了啟發:通過創設一個真實情境項目,再組織學生扮演特定的角色,一邊開展學習一邊完成項目。針對筆者這個想法,縣教研員提出了修改建議:不僅要創設真實情境開展項目學習,還要落實計算思維的培養。因此,筆者明確了本節課的教學主題“編程統計衢州五校的百家姓”,該項目需要三個課時完成,以下是第一課時的內容。
課前教師播放歌曲《百家姓》和視頻介紹。
師:百家姓是對姓氏人數的一種統計及排名,不同朝代有不同的百家姓,今天我們一起來統計身邊的百家姓。如果要統計班級中哪種姓氏的人數最多,應如何進行統計?
生:在班級名單上數一數(人工)。
師:如果我們要統計整個年級姓氏人數前五名,又需要怎么統計?
生:使用表格處理軟件,如Excel。
師:如果要統計衢州五校的百家姓,又需要怎么統計?
學生思考、產生疑問。
師:要統計衢州五校所有學生的姓氏情況,數據量較大,如果還是使用表格處理軟件處理數據就會比較慢,為了提升效率,選擇使用編程軟件處理數據會比較合適,如Python。接下來,我們一起來統計衢州五校的百家姓。
設計意圖:首先以音樂、視頻導入新課,激發學生的學習熱情;然后提出處理數據量由小到大的三個問題,逐步引出項目“編程統計衢州五校的百家姓”。
師:假如你是百家姓統計小隊成員,并已經拿到學生名單,請通過編程讓計算機實現統計。根據計算機解決問題的一般步驟,首先需要設計算法。
學生設計算法。
師:編程統計衢州五校百家姓的算法是怎樣的呢?在這里,老師給出了具體步驟,但是這些步驟是無序的(如圖1),需要同學們自行排序。

圖1
學生思考、總結、回答。
設計意圖:讓學生置身情境當中,主動思考算法步驟,驅動項目分解。
師:算法中的每一個步驟都是一個子項目,“編程統計衢州五校百家姓”這個總項目分成了六個子項目,接著,我們來實現第一個子項目“讀取數據”。
探究問題1:如何從外部文件中讀取數據?
學生根據導學案中探究1進行思考、總結、展示(如圖2)。

圖2
教師利用多媒體投影展示、評價、改正。
師:接下來,我們利用Python編寫以上程序并調試運行,實現從外部文件讀取數據。
學生編寫程序、調試運行。
設計意圖:通過探究問題1的開展,促進學生自主學習課本內容;通過多媒體投影展示,得以及時評價鞏固;通過編寫程序、調試運行的過程,體驗成功的樂趣。
師:“編程統計衢州五校百家姓”中的第一個子項目“讀取數據”我們已經完成了,接下來,我們要實現第二個子項目“取出姓氏”。
探究問題2:如何提取姓名中的姓氏?
學生思考、總結、回答。
師:同學們說出了通常的做法,現在要用計算機編程解決這個問題,首先要考慮在這個過程中會涉及哪些變量?
生:姓名、姓。
師:“姓名”可以用一個變量來存儲,如name;“姓”可以用另一個變量存儲,如“x”。這個過程稱作什么?
生:抽象。
師:經過抽象后,這個問題變成了從name中取出x的問題(如下頁圖3),那么是怎樣從name中取出x的呢?

圖3
學生思考、總結、回答。
師:同學們知道根據name的情況來取出x,老師總結了大家的做法并推導出這個計算模型的過程(如下頁圖4),我們可以將其稱為什么?

圖4
生:建模。
師:在用計算機編程解決問題的過程中,首先是抽象,然后是建模,接下來是什么呢?
生:設計算法。
師:取出姓氏的自然語言描述的算法為:①獲取姓名存入name中;②name是否復姓?如果是,取前面2個字符,如果否,取前面1個字符。請同學們根據上述算法,在導學案探究2中完成“取出姓氏”的流程圖設計。
學生思考、繪制流程圖。教師展示學生的流程圖和標準的流程圖并點評。
師:取出1個姓名中姓氏的流程圖算法成功了,要取出多個姓名中姓氏的流程圖又怎么實現呢?
生:可以進行多次循環。
師:算法設計好之后,就要編寫程序,有了流程圖表示的算法,編寫程序就變得有章可循,只需按照步驟對應過來(如圖5)。現在,請大家利用Python合作編寫以上程序并調試運行,實現從所有姓名中取出姓氏。

圖5
學生相互合作編寫程序、調試運行。
設計意圖:幫助學生理清用計算機解決問題的過程,落實培養計算思維的目標;通過合作編寫程序,既能增強學生的獲得感,又能提升學生的反思意識。
師:本節課我們創設了一個總的項目“編程統計衢州五校的百家姓”,然后通過算法的設計,將其分成了六個子項目。通過第一個子項目“讀取數據”,我們學習了pandas模塊、Series和DataFrame兩種數據結構、read_excel()函數;通過第二個子項目“取出姓氏”,我們回顧了用計算機編程解決問題的一般過程,學習了兩種數據結構中的常用屬性index和常用函數append。后面的課程我們將繼續學習其余四個子項目以及統計“大眾化名字”等拓展項目,讓我們一起期待項目的實現吧。
設計意圖:通過課堂總結,幫助學生整理學科知識并調動學生對后期項目學習的積極性。
項目化學習這五個字看似簡單,但要真正執行起來,真正讓課堂有效起來,是要付出很多努力的。創設項目要真實有趣,合作探究要涵蓋所學內容,讓學生的能力在完成項目的過程中得以提升。可見,項目化學習是一個系統工程,需要教師用整體的思想去設計教學,用分步的思想去開展項目。
在將知識融入項目的過程中,學生為實現真實有趣的項目并滿足自己的成就感,對項目中所要學習的知識是十分渴望的,因此,在探究“如何從外部文件中讀取數據”的過程中,學生積極且高效地開展自主學習,并取得了優異的成果。
項目化學習解決了真實問題,培養了核心素養,但其所涵蓋的知識是有限和特定的,在平時的教學中還需要采用多元化的教學方式。
筆者一直在思考什么是落實計算思維的信息技術教學。在“如何取出姓氏”的探究中,以往課堂教學的重心都會放在程序的編寫上,那是因為學生沒有理解計算機是如何進行處理的。在本課中,筆者通過抽象建模、設計算法、編寫程序、調試運行,鍛煉學生形成自主解決問題的能力,使學生能夠采用計算機來界定問題、抽象特征、建立結構模型、合理組織數據,從而能夠真正地通過計算機編程的方式解決問題。