青少年软件编程基础与实战(图形化编程四级)
上QQ阅读APP看书,第一时间看更新

1.1 课程学习

编写“唐诗复读机”程序,需要用到字符串的输入和输出功能。字符串是一种数据类型,绝大多数编程语言有字符串类型,Scratch也不例外。字符串类型非常重要,在本案例作品中,我们首先学习字符串的概念,然后认识“运算”分类积木,最后编写程序。

1.1.1 认识字符串

编写“唐诗复读机”程序,首先需要将所有诗句都以字符串的形式保存在变量中。因此,熟练掌握字符串的应用对编写“唐诗复读机”程序非常重要。

什么是字符串呢?当提到“串”字时,大家的脑海中往往会浮现出用线或者竹签串起来的物品或食物,比如一串灯笼、一串珍珠、一串冰糖葫芦等。那么字符串难道就是把字符串起来吗?是的,可以这样理解!你一定会非常好奇,Scratch中的字符是如何被串起来的?下面我们一起来研究一下吧!

用Scratch制作动画或游戏时,经常会使用到字符串,例如,角色之间进行对话或输出结果时需要用到“说你好!”积木,这里的“你好!”就是一个字符串,它由3个字符组成:“你”“好”和“!”。

1. 字符串是由0个、1个或多个字符组成的有限序列

多个字符按照一定的顺序连接在一起就组成了字符串,每个字符在字符串中都有确定的位置。只有1个字符,也是字符串。如果1个字符都没有(有0个字符),也能组成空字符串。字符串的存储方式如图1-2所示。这是一个命名为“诗句”的字符串,它由5个字符组成,这5个字符可以看成小火车“诗句”的5节车厢,每节车厢里存放一个字符,它们分别是“床”“前”“明”“月”“光”。为了记录字符在字符串中的位置,需要给每个字符分配一个整数作为编号,编号分别是1、2、3、4、5(在有些编程语言中,编号是从0开始的),这样就能够把字符和编号对应起来了。

011-01

图1-2 字符串“诗句”的存储方式

需要注意的是,字符串一旦定义好,每个字符的位置都是固定的。字符串的编号(也称为字符串的下标)用来标记字符在字符串中的位置,所以编号(下标)对字符串来说非常重要。

012-01

Scratch中,字符串的编号(下标)从1开始,每个编号(下标)所表示的位置可以存放一个字符,我们可以根据编号(下标)访问字符串中对应的字符。

2. 字符串可以包含英文字母、数字、特殊字符、汉字及其他字符

字母如:A、B、C、D、E、F、G、H、I、J、K、L、M、N、O、P、Q、R、S、T、U、V、W、X、Y、Z;a、b、c、d、e、f、g、h、i、j、k、l、m、n、o、p、q、r、s、t、u、v、w、x、y、z。

数字如:0、1、2、3、4、5、6、7、8、9。

特殊字符如:+、-、*、/、#、!、“”、‘ ’、>、<、=、_、@、$、&、( )、\、^、[ ]、,、.、;、?。

汉字如:唐 诗 三 百 首。

字符串可以是多种字符的组合,如“Hello 2058!”“1+2=?”“2x+3y=8”“2020年10月1日”“第一局比分为21:19”“^_^”“@_@”“C++”等。

在图1-3所示的代码中,小猫说出的“床前明月光,疑是地上霜。”就是一个字符串。

012-02

图1-3 小猫说出字符串的代码及运行效果

试一试

你还可以构造出哪些字符串,试着让小猫说出你构造的字符串吧!

1.1.2 认识“运算”分类积木

要制作“唐诗复读机”范例作品,需要用“运算”分类中的积木。我们需要认识“运算”分类中的4个积木,如下表所示。

013-01

(1)013-02:此积木用于将两个字符串连接起来,如“连接apple和banana”得到的结果是“applebanana”。字符串的连接运算也可以嵌套使用,如图1-4所示的代码。请问该代码一共使用了几个“连接××和××”积木?

013-03

图1-4 “连接××和××”积木的嵌套

(2)013-04:此积木用于计算字符串的长度。例如:013-05积木的运算结果是6。

(3)013-06:此积木用于输出字符串中某个位置上的字符。此积木包含两个参数,第一个参数用来存放字符串,第二个参数是该字符串中某个字符的编号(下标),用于指定要输出的字符。例如:013-07积木的运算结果是“思”。

(4)013-08:此积木用于判断字符串之间的包含关系,运算结果有“True”和“False”两种。注意:此积木包含两个参数,第一个参数“apple”和第二个参数“a”。只有当第二个参数是第一个参数的子串时,运行的结果才为True,否则为False。例如:013-09积木的运算结果为True。

子串:是指字符串中任意个连续的字符组成的子序列。例如:举、举头、举头望、举头望明、举头望明月、头望、头望明、头望明月、望明月、望明、明月、月都是字符串“举头望明月”的子串。那么013-10积木的运算结果是什么呢?结果是True,也就是说字符串本身也是它自己的子串。

再来看一个例子,013-11积木的运算结果为False。虽然字符串“举头望明月”中包含“望”也包含“月”,但是组成字符串“望月”的两个字符在原字符串中的编号(下标)不连续,所以“望月”不是“举头望明月”的子串。

试一试

请说出下列积木的运算结果。

014-01

1.1.3 编写“唐诗复读机”程序

“唐诗复读机”程序能够实现以下功能。

输入唐诗:依次显示“请输入诗名:”“请输入作者年代、名字:”“这首诗有几句?”“请输入诗的第××句:”(××表示诗句的编号),直到整首诗输入完毕,如图1-5所示。

014-02

图1-5 输入唐诗的运行界面

输出唐诗:按下↓键,诗人角色自动说出诗名、作者和诗;按下空格键,停止显示,如图1-6所示。

014-03

图1-6 显示唐诗的界面

1. 前期准备

本课范例作品需要用到“水墨画”和“诗人”两张图片,具体操作步骤如下。

(1)添加“水墨画”图片作为舞台背景,同时删除默认的空白舞台背景。

(2)添加“诗人”图片作为角色,同时删除默认的小猫角色。

2. 唐诗输入功能的实现

唐诗通常可以分为律诗、绝句和古诗3类,以字数划分有四言诗、五言诗、六言诗和七言诗。另外,绝句有4句,律诗有8句。为了使“唐诗复读机”可以显示不同类型的唐诗,需要新建变量“诗”用于存放用户依次输入的诗句,新建变量“诗名”用来存放诗的名字,新建变量“作者”用于存放作者的朝代和名字,新建变量“长度”用于存放诗的句数。

(1)选择“诗人”角色,将其移至(-90,-30)的位置。

(2)设置变量的初始值:设置变量“诗”“诗名”“作者”和“长度”的初始值为“空”,依次询问相关信息后,将变量“诗”“诗名”“作者”和“长度”的初始值设为“回答”,代码如图1-7所示。

015-01

图1-7 设置诗人角色的位置及变量初始值的代码

(3)用“连接××和××”积木将变量“诗”和新输入的诗句进行连接,将其作为变量“诗”的新值,重复执行这个过程,就可以将诗句都连接到变量“诗”中,代码如图1-8所示。

016-01

图1-8 连接变量“诗”和输入诗句的代码

(4)唐诗的句数已经保存在变量“长度”中,唐诗有多少句,上面的过程就重复执行多少次,新的诗句连接到变量“诗”后,n的值加1。循环输入诗句的代码如图1-9所示。

016-02

图1-9 循环输入诗句的代码

我们需要注意,在输入诗句的时候,不要忘记输入标点符号。

3. 唐诗显示功能的实现

(1)继续为“诗人”角色编写代码。当按下↓键时,按照“诗名”“作者”和“诗”的顺序重复显示诗句,代码如图1-10所示。

016-03

图1-10 重复显示诗句的代码

(2)当按下空格键时,停止显示诗句。这里需要用另一段代码来侦测空格键是否被按下,如果空格键被按下则停止全部脚本,如图1-11所示。

017-01

图1-11 停止显示诗句的代码

(3)“诗人”角色的完整代码如图1-12所示。

017-02

图1-12 “诗人”角色的完整代码

(4)保存程序,并将其命名为“唐诗复读机”。

想一想

输入完毕后,按下↓键,就可以重复显示保存在变量“诗”中的唐诗,按下空格键停止显示。在图1-11所示的代码中,能否将“当按下↓键”积木替换为“当绿旗被点击”积木,为什么?

1.1.4 字符串的输出

“唐诗复读机”程序中使用了018-01积木,当然也可以使用018-02积木。常用的字符串输出积木有以下4个。

018-03

除此之外,编写程序的过程中有时需要输出格式化的信息,例如:坐标、日期、时间、星期等,当要输入的信息由多个变量或字符串组成时,可以嵌套使用“连接××和××”积木进行格式化输出。

(1)格式化输出角色的坐标:x坐标125,y坐标-50。

018-04

(2)格式化输出系统当前的日期:2020年3月。

018-05

(3)格式化输出系统当前的时间:18:30:56。

018-06