李亞魁 邱浩 山東省淄博高新區實驗中學
編程教育教學對提高學生計算思維有著很大的幫助,隨著國內對小學編程教育的重視程度不斷提升,圖形化編程知識已陸續出現在各省市小學信息技術課程中。北京師范大學傅騫教授曾指出:“由于圖形化編程工具本身也有其局限性,學生進入高中階段最終還是要學習文本編程。因而,在編程教育中,何時從圖形化編程過渡到文本編程以及如何使學生將學習圖形化編程的經驗遷移到文本編程學習中,是值得研究的問題。”因此,如何把學生在小學階段已學會的圖形化編程知識遷移到初中階段的代碼編程學習中,并在內容、方法、平臺上做好兩個學段之間的銜接工作,是非常值得研究的問題。
在教學實踐中,筆者嘗試利用Scraino來編寫初中課本(泰山出版社2019版本)中Python的幾個典型案例,探索尋求一種弱化語言本身,強調編程思維和算法學習的方法,以求實現小學階段和初中階段信息技術教學的有效銜接。
密碼驗證案例是利用選擇結構作出判斷制作一個密碼驗證程序,雖然對于信息技術教師來說,基本上一眼就可以看出這個程序的結構和功能,但是對于只學過兩三節課代碼編程的初中一年級學生來說,接受起來還是存在較大困難。另外,該案例中涉及“變量”“賦值符號”“等號”等知識,以及純英文的if…else語句,這無疑使得學生理解程序更加困難。所以,教師不妨先向學生描述并分析這個問題,并給他們7~8分鐘左右的時間,用圖形化編程的形式,將這個程序編寫出來,以此幫助他們理解該程序的功能和效果,然后再引導學生嘗試讀懂、編寫這個Python程序(如下頁圖1)。這樣就形成了學生先學習理解該程序的功能,再根據功能去領悟學習Python代碼含義的學習方法。當然,有的教師會提到可以借助流程圖分析程序,不可否認,流程圖依然是非常好的方法,但是流程圖也有一定的劣勢:①流程圖很難讓學生動手參與實踐;②流程圖和程序代碼呈“弱關聯”的狀態,也就是說學生理解了流程圖以后,怎樣把流程圖映射到代碼中,還是比較麻煩的過程。

圖1 密碼驗證程序的Python代碼
而利用圖形化程序編寫(如下頁圖2)就相對直觀,因為這相當于將程序直接翻譯成了漢語,學生通過模塊中的如果、那么,很容易就明白了“if”“else”的含義。而且,這里的縮進和積木塊的顏色區分,也能產生一種直觀的映射。對于此復雜度的程序,學生在小學階段的圖形化編程學習中早已理解掌握,因此,借助圖形化程序編寫,能夠很好地將學生在小學信息技術課程中學到的知識技能,與初中的程序代碼關聯起來,起到銜接和輔助的作用。

圖2 密碼驗證程序的圖形化程序代碼
有關驗證碼校驗的案例程序更加復雜,它有兩層循環,外層是一個條件循環,用來判斷輸入的驗證碼和隨機生成的驗證碼是否一致,內層是一個計數循環用來生成六位數的隨機驗證碼。其中,計數循環的循環體有兩句,第一句的功能是產生一個0~9的隨機整數,第二句的功能是將這個整數以字符串的形式依次存儲到變量mc中,循環六次就產生了6位隨機數。學生比較難懂的是循環體的第二句,每次循環都通過“+”號,以字符串的形式將這1個產生的隨機數追加存儲到mc中,而不是數學的加法運算。再加上三個變量mc、mi、ms(如圖3),學生理解起來的確比較困難。

圖3 驗證碼校驗程序的Python代碼
然而,利用圖形化編程來實現這個程序(如圖4)的優勢在于:①變量的命名,可以用漢字,見名知意。②語句的層次歸屬關系非常明確,雖然Python代碼中也有嚴格的縮進要求,但是從觀感和閱讀性上來看,仍然需要非常高的學習成本,而在圖形化編程中直接以括號形式的結構,把內層語句框起來,不用過多的解釋,學生很容易明白。

圖4 密碼驗證程序的圖形化程序代碼
筆者發現,在Scraino中學生基本可以用近乎“讀題”的形式把這個程序編出來。第一步定義三個變量:驗證碼、輸入碼、1位隨機數。第二步通過計數循環,生成一個6位的隨機數驗證碼,循環體通過兩行程序實現,第一行是將變量“1位隨機數”設為0~9之間的隨機數,第二行是將驗證碼設置為鏈接“驗證碼”和“1位隨機數”,“鏈接”一詞可以非常形象地讓學生了解6位數生成的過程,進而為理解mc=mc+str(ms)做好鋪墊。同時,第一句中的“在0和9之間取隨機數”積木塊,也會幫助學生理解random函數。類似“random.randint”這樣的語句,如果不是在理解的基礎上加深記憶,大部分學生等到隔一周再來上課就會遺忘。此外,rang(0,6)和randint(0.9)這兩個語句不好理解,因為同樣是用括號表示范圍,range()函數適用“前包后不包”的規則,而randint就全都包括,很容易混,通過圖形化的這個過程,更容易讓學生理解這個程序運行的過程。
基于上述內容,可以清晰地對比:利用圖形化編程和畫流程圖這兩種方式,哪種對學生學習Python代碼更有幫助。
“拍7游戲”案例采用的是枚舉法,即找出明7和暗7。如圖5所示,程序用計數循環,把100以內所有的整數列舉出來,再用if語句逐個進行判斷,把符合明7條件或者暗7條件的進行輸出,不符合的略過。這就涉及了in和%取余運算,且有三層縮進。

圖5 密碼驗證程序的圖形化程序代碼
為了讓學生更為直觀地了解枚舉法,教師仍然可以通過圖形化編程的形式(如圖6),輔助學生深入地理解如何利用枚舉法找到所有的拍7數,同時對核心的條件表達式語句<“7 in str(i) or i%7==0”>有一個直觀的認識。

圖6 拍7游戲程序的圖形化程序代碼
至此,可能有教師會說,圖形化編程的局限性很強,有很多程序的功能實現不了。然而,筆者深入研究后發現,泰山版初中信息技術教材上所有的Python程序,都是可以運用圖形化編程的形式編寫的,如迭代、冒泡排序、遞歸、水仙花數,百錢買百雞、棋盤上的麥粒等,而且,現在眾多的智能家居、智能玩具和無人機等,都可以通過圖形化編程語言進行編程控制。另外,研究這個方法的目的就是探索一種將小學圖形化編程知識遷移到初中學習中,進而輔助Python代碼編程學習的方法,所以從這個角度看,圖形化編程軟件(如Scraino),確實可以作為一種工具來做實踐研究。
筆者希望通過此項研究,能豐富中小學編程教學銜接的教學策略,推動中小學生信息技術核心素養的有效提升。