- 青少年软件编程基础与实战(图形化编程四级)
- 赵凯主编
- 4042字
- 2022-01-06 09:47:07
2.1 课程学习
标点符号是辅助文字记录语言的符号,用来表示停顿、语气以及词语的性质和作用。中国古代的文书一般不加标点符号。有这样一个故事,从前一位私塾的教书先生收学费的标准是“无米面亦可无鸡鸭亦可无鱼肉亦可无银钱亦可”。穷人的孩子来读书,先生这样读:“无米面亦可,无鸡鸭亦可,无鱼肉亦可,无银钱亦可。”富人的孩子来读书,先生这样读:“无米,面亦可;无鸡,鸭亦可;无鱼,肉亦可;无银,钱亦可。”
对计算机来说,文字和标点符号都可以看作字符。接下来,我们以修改这段没有标点符号的古代文书为例,通过编写“批改小帮手”程序来进一步掌握利用Scratch处理字符串的方法。
2.1.1 前期准备
本课范例作品的舞台背景和角色可以从背景库和角色库中选择,此外还需要绘制4个按钮角色,具体操作如下。
(1)从背景库中添加名为“Spaceship”的图片作为舞台背景,并删除默认的空白舞台背景。
(2)从角色库中添加“Retro Robot”角色,并删除默认的小猫角色。
(3)绘制4个按钮角色,分别命名为“统计”“插入”“替换”和“删除”,角色的形状和颜色可以自己设定。范例作品如图2-1所示。
图2-1 “批改小帮手”范例作品
作品预览
2.1.2 程序分析
“批改小帮手”范例作品程序共有5个角色:Retro Robot、“统计”按钮、“插入”按钮、“替换”按钮和“删除”按钮。
Retro Robot角色的功能:显示提示文字或处理后的文字。当程序运行时,Retro Robot将提示文字显示出来,例如“主人,您好!”“请输入您要处理的文本:”。用户输入文本后,Retro Robot显示输入的文本,然后在舞台上显示4个按钮,用户单击按钮即可实现相应的功能。
单击“统计”按钮,可以统计字符串中某个字符的数量;单击“插入”按钮,可以将一个新字符插入字符串中;单击“替换”按钮,可以用一个字符替换字符串中已有的某个字符;单击“删除”按钮,可以删除字符串中的某个字符。
统计、插入、替换和删除字符串中的某个字符时,需要对该字符串进行遍历。
所谓遍历就是从字符串的第一个字符开始依次查找,判断字符串中的每个字符是否等于待查找的字符,直到查找完所有字符为止。所以,遍历一个字符串的循环次数应该等于该字符串的长度,使用“××的字符数”积木可以获取该字符串的长度。
在插入新字符、删除和替换一个已有的字符之前,需要先查找到该字符在字符串中所在的位置,然后再执行相应的操作。首先需要建立一个变量,将其命名为“临时”,并将该变量的初始值设置为“空”,再根据处理规则将该字符与变量“临时”进行连接,从而生成一个经过处理的字符串。字符串处理完毕之后,Retro Robot会显示处理过的字符串。接下来,我们一起来完成“批改小帮手”范例作品程序。
2.1.3 统计功能的实现
(1)选择“统计”按钮,将其移至舞台的适当位置,并为其编写代码。
(2)当绿旗被点击时,隐藏“统计”按钮;当接收到消息“按钮显示”时,显示“统计”按钮。
(3)在Retro Robot询问后,用户通过键盘输入需要统计的字符,新建变量“输入的文本”用于保存用户输入的文本。新建变量“待处理字符串”,用于保存每次处理前的数据,将其初始值设置为“空”。每次处理结束后,处理的结果都会被重新保存到变量“待处理字符串”中,以便进一步处理。
(4)每按一次“统计”按钮都要遍历一次待处理的字符串。如果变量“待处理字符串”为空,则表示此次统计之前无任何字符串处理操作,那么就将变量“待处理字符串”的值设置为“输入的文本”,代码如图2-2所示。
图2-2 判断变量“待处理字符串”是否为空的代码
(5)询问“请输入您要统计的字符:”,并将用户的回答保存到变量“查找”中。新建变量“计数”用于保存已查找字符的个数,并将该变量的初始值设置为0。变量“下标”用于表示字符的编号,将其初始值设置为1,代码如图2-3所示。
图2-3 设置变量值的代码
例如,用户输入文本“无米面亦可无鸡鸭亦可无鱼肉亦可无银钱亦可”,统计字符“无”的个数。字符串的长度为20,所以需要循环20次,从第一个字符(下标为1)开始查找(见图2-4),如果找到的字符等于“无”,则变量“计数”的值加1。每查找一个字符,变量“下标”的值也加1。循环结束时,字符串查找完毕,广播消息“统计完毕”。
图2-4 遍历字符串示意图
统计某字符个数的代码如图2-5所示。
图2-5 统计某字符个数的代码
测试:点击绿旗,根据Retro Robot的提示,输入文本“无米面亦可无鸡鸭亦可无鱼肉亦可无银钱亦可”,Retro Robot依次说出“好的,我得到的文本是:”“无米面亦可无鸡鸭亦可无鱼肉亦可无银钱亦可”。点击“统计”按钮,用户根据提示输入需要统计的字符“无”后,Retro Robot显示“无的数量是4”。
想一想
输入字符串“无米面亦可无鸡鸭亦可无鱼肉亦可无银钱亦可”,统计字符“无”的个数时,如果希望把字符串中每个字符“无”的下标都保存在某个变量中,并且下标数值之间用逗号分隔,那么该如何修改“统计”按钮的代码呢?
2.1.4 插入功能的实现
(1)选择“插入”按钮,将其移至舞台的适当位置,并为其编写代码。
(2)当绿旗被点击时,隐藏“插入”按钮;当接收到消息“按钮显示”时,显示“插入”按钮。
(3)当“插入”按钮被点击时,需要判断变量“待处理字符串”是否为空,代码如图2-2所示。
(4)新建变量“查找”用于保存要查找的字符,新建变量“插入”用于保存要插入的字符。
(5)询问“请输入您要查找的字符:”,并将用户的回答保存到变量“查找”中。询问“请输入‘××’后要插入的字符:”(××表示查找的字符),并将用户的回答保存到变量“插入”中,如图2-6所示。遍历待处理的字符串,将新字符插入对应字符的后面,处理完毕后广播消息“插入完毕”,由Retro Robot显示处理过的文字。
图2-6 设置变量值的代码
新建变量“临时”并将其初始值设置为“空”,遍历待处理的字符串。如果遍历的字符等于变量“查找”的值,则将变量“临时”、遍历的字符和变量“插入”连接在一起(注意:变量“插入”连接在当前遍历的字符之后),实现插入功能的代码如图2-7所示。
图2-7 实现插入功能的代码
字符插入完毕后,插入字符后的字符串保存在变量“临时”中。将“待处理字符串”设置为变量“临时”的值,为下一次处理做准备,并广播消息“插入完毕”。当Retro Robot接收到消息“插入完毕”时,说出处理过的文字。
测试:在上次测试的基础上,点击“插入”按钮,输入要查找的字符“可”和要插入的新字符“,”,Retro Robot说出插入后的文本“无米面亦可,无鸡鸭亦可,无鱼肉亦可,无银钱亦可”。
试一试
要在查找到的字符前面插入一个字符,应该如何修改代码?
2.1.5 替换功能的实现
实现字符替换,首先要查找到被替换的字符,然后再将符合条件的字符连接到变量“临时”中。当遍历结束时,变量“临时”中存储的字符串就是替换后的结果,具体步骤如下。
(1)选择“替换”按钮,将其移至舞台的适当位置,并为其编写代码。
(2)当绿旗被点击时,隐藏“替换”按钮;当接收到消息“按钮显示”时,显示“替换”按钮。
(3)当“替换”按钮被点击时,应判断变量“待处理字符串”是否为空,代码如图2-2所示。
(4)分别询问要查找的字符和需要替换的字符,并将其存放到对应的变量中。设置变量“临时”的初始值为“空”,变量“下标”的初始值为1,代码如图2-8所示。
图2-8 设置变量值的代码
(5)在变量“待处理字符串”中,当查找到要替换的字符时,直接连接变量“临时”与需要替换的字符,否则连接变量“临时”与待处理的字符串,代码如图2-9所示。
图2-9 实现替换功能的代码
测试:在上次测试的基础上,点击“替换”按钮,根据提示输入要查找的字符“,”、要替换的字符“;”,处理完毕后,Retro Robot说出替换后文本“无米面亦可;无鸡鸭亦可;无鱼肉亦可;无银钱亦可”。
2.1.6 删除功能的实现
从一个字符串中删除某个字符,首先需要找到待删除字符在该字符串中的位置,然后将该字符的下一个字符连接到变量“临时”中。遍历结束后,新字符串中便不包含被删除的字符,具体步骤如下。
(1)选择“删除”按钮,将其移至舞台的适当位置,并为其编写代码。
(2)当绿旗被点击时,隐藏“删除”按钮;当接收到消息“按钮显示”时,显示“删除”按钮。
(3)当“删除”按钮被点击时,应判断变量“待处理字符串”是否为空,代码如图2-2所示。
(4)询问需要删除的字符,设置变量“临时”的初始值为空,并将变量“下标”的初始值设置为1。
(5)删除字符的代码如图2-10所示。
图2-10 删除字符的代码
测试:在前面测试的基础上,点击“删除”按钮,输入要删除的字符“无”。处理完毕后,Retro Robot说出“米面亦可;鸡鸭亦可;鱼肉亦可;银钱亦可”。
想一想
实现统计、插入、替换和删除功能时,都是从字符串的第一个字符开始遍历,将遍历的字符按照处理方式的不同连接到临时变量中。如果想“逆序”说出来一个字符串,那么应该如何实现?例如,输入“无米面亦可无鸡鸭亦可”,将字符串“逆序”说出来就是“可亦鸭鸡无可亦面米无”。
提示:从字符串的最后一个字符开始向前遍历。
2.1.7 Retro Robot功能的实现
Retro Robot的主要功能是说出文本和提示信息或处理后的文本,Retro Robot代码的编写步骤如下。
(1)选择Retro Robot角色,将其移至舞台的适当位置,并为其编写代码。
(2)当绿旗被点击时,将变量“待处理字符串”的值设置为“空”,显示文字“主人,您好!”,询问“请输入您要处理的文本:”,并将用户的回答保存到变量“输入的文本”中,显示用户的回答和“请选择您要处理的方式。”。
(3)Retro Robot接收到消息“统计完毕”时,说出字符串处理的结果,Retro Robot的代码如图2-11所示。
图2-11 Retro Robot的代码
试一试
我们会发现,把字符串“123454321”“level”“响水池中池水响”输入程序,逆序得到的字符串和原字符串完全相同!这种把词汇或句子颠倒过来,产生首尾回环效果的字符串,叫作“回文”(或回环)。判断一个字符串是否是回文,有两种思路。
思路1:先求出字符串的逆序,然后判断逆序的字符串是否和原字符串相同,相同即可判断该字符串为回文。
思路2:如果字符串的第一个字符和最后一个字符相同、第二个字符和倒数第二个字符相同,以此类推(见图2-12),如果每一对字符都相同(最后可能剩下单个字符),那么该字符串就是回文。
图2-12 思路2判断字符串是否是回文示意图
请你试着按以上两种思路编写判断字符串是否是回文的代码。