2.6 字符串函数
与其他编程语言相比,Scratch提供的字符串处理功能比较弱,只提供3个指令积木用来进行简单的字符串处理。这些积木能够将两个字符串连接成一个新的字符串,或者从一个字符串中取出某个字符,或者取得一个字符串的长度。
2.6.1 跟我做:成语接龙
在本案例中,我们将和小猫玩一个大家都很熟悉的成语接龙游戏,通过它来学习字符串的处理。
在这个成语接龙的游戏中,我们限定只能使用四字成语。小猫从“一马当先”开始出题,由用户输入成语进行接龙。如果用户输入的不是四字成语或者输入不匹配的成语时,就提示“接龙出错,游戏结束!”。
接下来,我们编程实现成语接龙的功能,具体步骤如下。
(1)启动Scratch软件并创建默认的项目,在小猫角色的脚本区,使用“说…2秒”指令显示“成语接龙开始啦……”,再创建一个名为“成语”的变量,将它的初值设定为“一马当先”。这样就设置好了接龙开始的成语,如图2-6-1所示。
(2)在进行成语接龙时,先让小猫角色说出“成语”变量中的成语,然后由程序用“第…个字符”指令积木取出该成语的第4个字符,再使用“询问…并等待”指令积木提示用户输入以某字开头的成语,并将用户的回答设置为“成语”变量的内容,最后把几个指令积木组合在一起放到一个“重复执行”循环指令积木内部。这样就得到了一个无限循环的成语接龙程序的基本框架,如图2-6-2所示。我们把这段脚本拼接在步骤(1)的脚本后面。
图2-6-1 设置接龙开始的成语
图2-6-2 接龙程序的基本框架
(3)编写判断用户接龙的成语是否出错的脚本。在程序中使用“…的长度”指令积木来取得用户回答成语的长度,并使用“第…个字符”指令积木取得用户回答成语的第一个字符,之后判断如果用户回答的成语不是4个字符,或者回答成语的首字与前一成语的尾字不一样,就使用“说”指令积木显示“接龙出错,游戏结束!”的提示信息,然后停止当前脚本的运行。我们把这段脚本(见图2-6-3)追加到“重复执行”指令积木内部,即将这段脚本拼接在“将[成语]设定为[回答]”指令积木之后。
图2-6-3 判断接龙出错的脚本
2.6.2 字符串处理
至此,一个简单的成语接龙程序编写完毕,可以开始对它进行测试了。
字符串类型是Scratch提供的3种基本数据类型之一。这种类型的数据是由若干个字母、数字、汉字或符号等组成的字符序列。值得注意的是,当一个字符串的长度为0时,把它称为空字符串(简称空串),它通常用来清空一个字符串类型变量中存储的内容。
Scratch提供3个指令积木用于操作字符串类型的数据,它们的作用描述如下。
(1)“连接…和…”积木:将两个字符串连接成一个新的字符串。
(2)“第…个字符…”积木:从一个字符串中取出指定位置上的一个字符。
(3)“…的长度”积木:获取一个字符串的长度,即组成这个字符串的字符个数。
如图2-6-4所示,这是一些进行字符串操作的示例,说明如下。
(1)前两行积木分别将变量“词1”和“词2”的值设定为字符串“你好”和“中国”。
(2)第3行积木是在变量“词1”的值后面连接一个字符串“世界”,得到一个新的字符串“你好世界”,并把它设定为变量“字符串”的值。
图2-6-4 字符串操作示例
(3)第4行积木是在字符串“我爱”后面连接变量“词2”的值,得到一个新的字符串“我爱中国”,并把它设定为变量“字符串”的值。
(4)第5行积木是取出变量“字符串”中的第2个字符(即“爱”字),并把它设定为变量“字符”的值。
(5)第6行积木是取得变量“字符串”的长度,并把它设为变量“长度”的值。
(6)第7行积木是把变量“字符串”的值设定为一个空字符串。
(7)第8行积木是取得变量“字符串”的长度,此时变量“字符串”的值是一个空串,所以它的长度为0。
2.6.3 动手练:回文诗
1.练习重点
取字符串长度、某个字符和连接字符串等积木的使用。
2.问题描述
宋代是回文诗创作的鼎盛时期,苏轼在其《记梦回文二首并序》中有一首回文诗:
空花落尽酒倾缸,日上山融雪涨江。红焙浅瓯新火活,龙团小碾斗晴窗。
把这首诗倒着读是:
窗晴斗碾小团龙,活火新瓯浅焙红。江涨雪融山上日,缸倾酒尽落花空。
请设计一个程序脚本,让用户输入一首七言回文诗,由程序将它倒着读出来。
3.解题分析
这个脚本的编程思路是,由后往前逐个字符读取回文诗的内容,如果字符不是句号或逗号,就用“连接”积木把单个字符连接起来。当凑够7个字时,就把这句诗说出来。
4.练习内容
(1)查看“控制”指令面板中“重复执行直到…”积木和“如果…那么”积木的帮助说明,简单了解它们的使用方法。
(2)把图2-6-5所示的程序脚本中的空白积木替换为真实积木。
图2-6-5 “回文诗”空白脚本