![Scratch 编程竞赛指南](https://wfqqreader-1252317822.image.myqcloud.com/cover/247/33094247/b_33094247.jpg)
1.6 加法出题
教学目的:认识列表,学会使用自制积木。
如果说变量是一个房间,里面只能装一个数据,那么列表就是一栋楼,里面有许多个房间,每个房间里都可以装数据。为了管理好这栋楼,还要为每一个房间贴上门牌号,这就是列表的编号,也叫索引。与代码语言不同的是,在Scratch中从编号1开始。
既然列表的作用是装多个数据,那么如何向列表里添加数据呢?
三种方法:
1.手动添加。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P45_1608.jpg?sign=1739231488-94fhoj9QtYnR3wAJoBayfWf12gmY6Nap-0-7aaf20d0a7121a6f0fda7cda68a2e4a2)
点击列表左下角的加号键,输入数据即可。适用于数据无规律或数据量较少。
2.文件导入。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P45_1621.jpg?sign=1739231488-rAMFEjrNGNHa2bXYFoxZofLCpA2mzZCC-0-0a49b1a49bdf743344239973041168e5)
右键点击列表,选择导入功能。从本地导入文本文件,前提是必须有文件才能导入。
3.程序添加。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P45_11681.jpg?sign=1739231488-4zwjXMU9fmBUhxvcPEmiX0NKSTf1xCZ0-0-9df0c3b9c472fab8206a614e9401d4e3)
使用“将……加入列表”积木。适用于:
(1)经过某种算法处理后所产生的结果,或者说数据有规律可循。
(2)每次运行程序时,必须对列表进行初始化。
开发需求001:
新建2个列表,分别命名为“列表1”“列表2”,并显示在小猫的左边和右边。在“列表1”中添加10个数据,从0到9。在“列表2”中添加10个数据,从9到0。通过编程,让小猫在“列表1”“列表2”两个列表中分别随机抽取1个数组成完整的计算式并输出。
例如,点击绿旗,小猫说“3+5=8”。
分析:
程序按照顺序依次完成:添加数据,抽取数据,组合输出。
具体步骤:
1.准备素材。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-T45_11357.jpg?sign=1739231488-oEPVdTXtD7XS4n35y3WtETMA7YVEQ0BZ-0-db787d7beaee611fff286e545e01f49b)
2.创建列表并添加数据。
题中要添加的数据有规律,所以可以使用程序来进行添加。
列表1中,先添加0,再添加1……最后添加9。可以看作是每次都往列表1中添加一个数,但这个数是不断变化的。创建一个变量,命名为“n”,表示每次要添加的数。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P45_1637.jpg?sign=1739231488-R9D5R687F8ELX5I9sVeuiDJdQ5utKYFN-0-636512479ff51b6077d22abb17763637)
在用程序对列表进行数据添加的时候,还要注意初始化列表。不然每次运行程序,都要添加一遍数据,这会导致列表中数据的重复。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P46_1643.jpg?sign=1739231488-OhxFndpTv6LHAf9DBuLOJ4gSRluRNir1-0-13ec13e4926c912c4720d6bcdc618ef7)
按照顺序执行,处理完列表1,继续用变量“n”,处理列表2。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P46_1644.jpg?sign=1739231488-kfJ2GqCMejncoz34FsDNn3elPVFKbk7T-0-a22446fd154f6a8f88ba25b291b29695)
3.抽取数据。
创建变量“数1”和“数2”,储存抽取的两个数。这么做的意义是:只有把数据存储到变量里,才能在后续的程序中随时对数据进行调用。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P46_1645.jpg?sign=1739231488-hAHQ8GxMKvO2qbuNyuHlhl0Yh84NG35g-0-3cc6198e626bff4a409c5fd38e9f9452)
4.组合输出。
当输出的内容是由字符串(常量)和变量相组合的时候,要用到“连接……和……”积木。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P47_1654.jpg?sign=1739231488-GtFp37QZK6Rez4KMExLphnlh89xjBtO7-0-d3f64eeade298c2461eb194446250418)
如果是多个字符串和变量相组合,就要对“连接……和……”积木进行嵌套。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P47_1655.jpg?sign=1739231488-CGRcm4wtbmdQWFlnF2ekgVMrp6VZrBm4-0-7336ebbd144eb70d931451bcd5f9c76b)
将变量和字符串加入空白处。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P47_1656.jpg?sign=1739231488-ScEpfAmXaRzrTRIoO0g7EDsOXXItUH39-0-8942d24bb1726bf03569f66e70053a41)
注意:第一个加号,是字符“+”。后面的加号,是加法运算符。
完整程序:
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P47_1657.jpg?sign=1739231488-99J9lj56p6aR46spYcwxRQTlloaiCrhK-0-58280830f8ca5798d24f496264b5eb6d)
执行结果:
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P47_1658.jpg?sign=1739231488-poMk165rQrUFCfOzgclqPaKgHcVJ1oMl-0-50d22316a32c838ca2f9b1b0b97e2d92)
开发需求002:
在程序001的基础上,创建列表3,包含4个数据,分别是“+”“-”“*”“/”。每次运行程序,都从3个列表中分别随机抽取一个数据,并完成组合输出。
分析:
由于组合输出的结果部分需要调用运算符,这里不再只有加法运算这一种情况,所以需要判断一下从列表3中抽取了哪个符号。判断在程序设计中就是分支结构“如果……那么……”。
具体步骤:
1.创建列表3,并添加数据。
数据量少,而且无规律,使用手动添加。列表如图1.6.1所示。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P48_1700.jpg?sign=1739231488-qVWmW60XiUtV12ud3KAt8OsT9Shnm6kD-0-87480739fe011dd4684b7ceae822f6ca)
图1.6.1
2.随机取数。
创建变量“符号”,用于储存从列表3中随机抽取的运算符号。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P48_1699.jpg?sign=1739231488-yYHnnPdpZsCMK1Uw0FjmEvTvDFxUnDFq-0-8f58df7e6c00be1e1f2173fb3e61236d)
注意:在数学中,除数是不能为0的。也就是说,当取到除号的时候,变量“数2”就不能取到0。需要在程序中,对这一特殊情况进行规避。
如果在Scratch中强制执行让除数为0,会发生什么呢?
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P48_1694.jpg?sign=1739231488-w7x0AiAYIyE5toPFOWneAe8Ko16TjRuj-0-0fafcdd48033071027b18445498209e3)
Infinity、-Infinity为正、负无穷的意思。
先取“数1”和“符号”,对“符号”判断,再取“数2”。这样就可以保证,取到除号的时候,除数一定不为0。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P48_1698.jpg?sign=1739231488-hA6I3tZ7GC9GdzvlRCiBJL9B3DI4psd7-0-28d44f8fa0c16ba4405ed92abf3ff597)
3.判断并输出。
一共存在4种可能产生的结果,可以使用4个“如果……那么……”按顺序组合,也可以使用3个“如果……那么……否则……”嵌套组合。按1.5节介绍,如使用嵌套会更方便。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P49_1706.jpg?sign=1739231488-IgoMcppN6rgDGn2Q5yUOPgfOok4TqXi4-0-91a5f4772957b9fc7cbe73af1c6e95d0)
完整程序:
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P49_1707.jpg?sign=1739231488-lasWykcxPMN9UdENt5y9ZmZx8fwYmgry-0-e9ef82e2341c7919bc85b9e10a097297)
注意:教学时经常发生学员编写的程序和教师编写的程序一模一样,但就是运行不出结果的现象。
请大家仔细观察下边两个指令。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P50_1804.jpg?sign=1739231488-Nab00MPY9RExZOrnpvH17veeuU81NxvW-0-8e6ee55185dd4ed8297d83a6eaf772da)
现在选中两个指令中等号的右边部分。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P50_1805.jpg?sign=1739231488-qmsBp5P0uoG0SD6bncFumncKdQsJxL6H-0-dbad7763af4088d1395be1b0bc317f77)
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P50_1806.jpg?sign=1739231488-4i9oeg1pD5azZXfLmv3MfkjnO4E2ZWGb-0-05d279aa2132c8370b3932338a97bd8e)
没错,第一个积木中只有一个字符“+”,而第二个积木中是由一个空格和字符“+”组成的字符串“+”。
一个字符和两个字符怎么能一样呢?
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P50_1799.jpg?sign=1739231488-lfYJdbyZ1Mltzuko2aBYe9UH65AsnblJ-0-09f38d8fddf8161e58089db81818ea0e)
为了让计算机真正的理解人类的意图,程序设计语言都非常的严谨。可以这么说,差之毫厘,谬以千里。
拓展:
在程序002中,积木数量已经很多了,看着就眼晕。有没有好的方法能让程序更加的工整,设计思路更加的清晰呢?
使用自制积木,也叫自定义函数。
关于函数:
函数是一段具有特定功能、可重复使用的代码块。
函数包含两部分:函数的定义(封装),函数的使用(调用)。
使用函数的意义:把一个复杂的大问题分解成一系列简单的小问题,分而治之,为每个小问题编写程序。当各个小问题都解决了,大问题也就迎刃而解。
就像春晚小品中演的那样:把大象装进冰箱,总共分3步。把冰箱门打开,把大象装进去,把冰箱门关上。至于每一步具体如何实现,不在讨论范围之内,等3个环节都解决了,大象也就真的装进冰箱里了。这正是一个典型的函数式编程思维!
按照这个思路,重新审视一下程序002。程序002总体分为3步运行,首先创建好函数,并完成整个程序的框架。程序见下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P51_1868.jpg?sign=1739231488-QODHR5JSR8M6aJO0nhkQpdcKGZTBw4al-0-2a6f891e7cf731218ddf8e304d170382)
点击绿旗,依次执行3个自制积木,即函数的调用。
由于这些积木都是自己创建的,计算机并不明白其中的含义,所以还要把每个自制积木具体都包括什么告诉计算机,即函数的封装。程序分别见下图、下图。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P51_1871.jpg?sign=1739231488-LzwRSGFPbtsri34tLYavnYDJcK2FoghY-0-f5de3cef4f7f1cee68c8afc4ce607906)
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P51_1870.jpg?sign=1739231488-T51EtlLRoUxtVb4tlcgK5nPdtMMcN0qi-0-e5a2e4fef1b44b257ce7c275400eda8f)
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P52_1876.jpg?sign=1739231488-Ht5kDCtFxqmHskzA0QCrvTbOnBzdm26c-0-cbf658ab8c05c6aa0a0cc4dea84316c7)
所以,自定义函数一定要先封装功能,再进行调用。程序写好以后,就可以直观的看到程序一共分为三部分,通过编程把每一部分都实现,那整个程序也就实现了。
试一试:
创建一个列表,命名为“列表1”,依次添加0~9共10个元素。再创建一个列表,命名为“列表2”,里面放“+”“-”共2个元素。运行程序则随机从列表1中抽取3个数字,再从列表2中随机抽取2个符号,组成完整的计算式并输出。见图1.6.2。
![](https://epubservercos.yuewen.com/DEB2E0/17718436707655106/epubprivate/OEBPS/Images/Figure-P52_1877.jpg?sign=1739231488-nEM5UwAatX4DWfgqAACPmC095GovJkmh-0-f8e4f81f0cca7a8f57224a0a40dc459a)
图1.6.2