(我每天都會寫一些和孩子學習、教育有關的內容,但是因為排版複雜、時間不夠等原因,並不是每一篇都會發布到百家號。大家應該知道在哪裡找到我的主號吧!謝謝關注!)
上周給小朋友們講「運算符」中的字符串操作。在計算機編程中,字符算操作有著很廣泛的應用,有很多函數庫幫助我們輕鬆地完成各種字符串運算。而在Scratch2.0中,只有以下三個基本的積木塊,從字面上很容易理解它們的含義。看似簡單,可是小朋友們千萬別忽視字符串操作的作用哦。為了幫助小朋友們從零基礎學習字符串操作,冉爸準備了「說反話」和「成語大全」兩個例子。
讓我們從簡單的例子入手,先使用「連接」積木塊。我們和角色對話,告知姓氏以後,角色以「您好,(某)同學」來和我們打招呼。這裡將兩個「連接」積木塊疊加在一起,達到連接多個字符串的目的。
接下來,角色從我們所說的話中,找到最後一個字。通過這個練習,我們學會使用「第()個字符:()」,和「()的長度」這兩個積木塊。
這兩個練習不難,小朋友們反覆嘗試幾次,就可以熟悉這三個積木塊了,接下來我們開始「說反話」的例子。
一. 「說反話」
我們要編寫一段代碼,設計一隻聰明的鳥兒,它可以把主人的話反過來說一遍。我們在這段代碼中,要用到上面的三個積木塊。
在下面的代碼中,變量 i 代表當前指向的字符的位置,給小朋友們稍稍引入一點「指針」的概念。通過循環,改變變量 i 的值,從而指向不同的字符。由於是從最後一個字符倒序指向第一個字符,因此連接所有的字符後,聰敏的鳥兒就可以把主人的話反過來說一遍啦。
冉爸在上課的時候,從最簡單的找最後一個字符開始,進而找不同位置的字符;從五言古詩,到七言古詩,再到隨機長度的字符串,讓孩子由淺入深,完全理解這一段代碼。
在這一段代碼中,我們先設定一個變量的初始值,在循環中不斷改變該變量的值,直到臨界條件滿足,停止循環。實際上,類似這樣的結構在編程中是經常遇見的,冉爸提醒小朋友們先熟悉這樣的「套路」,在更多的例子中識別它,進而在將來的作品中熟練地運用這樣的結構。
二. 「成語大全」
接下來,我們要挑戰新的難度啦。首先收集小學~中學階段語文課本中出現的所有成語,接下來導入Scratch作品中,輸入任意一個漢字,搜索包含這個字的所有成語。
第一步收集成語的工作並不是通過Scratch完成的。冉爸利用Python,從網絡上抓取語文課本中出現的所有成語,一共有2025個,保存在txt文件中,然後利用Scratch列表的導入功能,將這些成語分「小學」,「初中」,「高中」,「全部」保存在不同的列表中,下圖是列表「全部」中的成語:
接下來就是從列表中依次取出成語,判斷其中是否包含要搜索的漢字。如果有,我們的機器人會讀出該成語。整個代碼稍微有些長,如果小朋友們掌握了循環、判斷、變量、字符串操作等知識,是可以理解編程思路的。冉爸建議學有餘力的小朋友,通過閱讀與改編,來加深對代碼的理解,直至實現自己的創作。
對啦,這段代碼中還有「成語接龍」,思路也還算簡單,留給小朋友們探索吧。
後記:Scratch2.0中缺少判斷字符串中是否包含子字符串的功能,比如說,如果要查找成語「煥然一新」中是否含有「新」,我們需要取出成語中每一個字符,再和「新」做比較,這樣很不方便。在Scratch3.0中就不存在這個困擾啦,因為有了下面這個新的積木塊,是不是很方便啊?