趣学妙用Scratch编程31 进阶篇(一) 赛跑排名问题
2023-06-27 08:35:12
引言
通过“妙用篇”的学习,我们发现,Scratch能做的事情确实很多,能够实现我们大脑中涌现的各种奇思妙想。而在实现这些奇思妙想时,我们的Scratch编程水平也在不知不觉间得到了提升。你可能对编程有了更大的兴趣,想去探索那些难度更高、也更有挑战性的领域,而不仅仅局限于实现一些动画、游戏之类的作品,你可能会想,Scratch能不能帮我解决一些更复杂的问题呢? 是的,编程的目的,本身就是为了帮助人们解决一些单纯人力解决起来麻烦或者比较困难的问题。Scratch作为一种入门型编程语言,虽然用于生产生活中还有些不足,但是,这不妨碍我们利用它做一些有益的尝试。比如:解决一些数学领域的趣味问题、研究神秘的分形图、进行逻辑推理、实现更快速有效的排序、查找等。这一切的背后,都需要算法。 算法是程序的灵魂,我们在以前编写程序的时候,你拖进编程区域的每一块积木都是在为实现你大脑中的算法服务的。算法实现了,你的程序功能就实现了。因此,不管你有没有意识到,你和算法已经打了很长一段时间的交道了。但是为了让我们的程序更有效、更精练、更能应对现实问题的挑战,我们需要在算法领域做进一步的训练,去学习前人已经总结的许多精彩算法,将其消化吸收,成为自己解决问题的智慧。这就是我们“进阶篇”要实现的目标。 在接下来的学习中,我们会遵循问题——分析——编程——总结的模式,每一节都会提出一个问题,分析用Scratch怎样解决它(设计算法),编写程序,最后进行总结。由于已经是进阶阶段的学习,我们就不会再去讲解具体指令的用法,我们相信,即使有些指令你没有用过,你完全可以通过上手试验的方式迅速掌握。 下面就开始第一个问题的讲解。问题
森林里举行了一场运动会,小狗、小兔、小猫、小猴和小马参加了百米赛跑。比赛结束后,小动物们说了下面的一些话: 小猴说:“我比小猫跑得快。” 小狗说:“小马在我的前面问过了终点线。” 小兔说:“我的名次排在小猴的前面,小狗的后面。” 请你编写程序,根据小动物们的回答排出他们的名次。分析
这是一个逻辑推理类的问题。什么是逻辑推理呢?它是指根据周围环境和活动找出其内在的逻辑关系,从而推理出符合其内在逻辑关系的结论。只有具备了逻辑推理能力,才能对事物做出符合逻辑关系的正确判断,因此逻辑推理能力也是基本个人素质之一。比如无所不知的名侦探柯南,总能根据环境和活动中存在的蛛丝马迹,找到“永远只有一个”的“真相”,这个“真相”,就是我们用逻辑推理得到的“结论”。 要解决逻辑推理问题,我们需要根据已知的条件,提炼出正确的逻辑关系,再将这些关系用Scratch中的逻辑表达式来表示。那么什么是逻辑表达式呢?用逻辑运算符(与、或、不成立)将关系表达式(大于、小于、等于有关的式子)连接起来的有意义的式子就是逻辑表达式。比如:
- 2>1,很明显这是“对”的,也就是它“成立”,所以当你点击这个积木,Scratch会告诉你它的值是“True”,也就是“真”或“成立”的意思;
- 2<3,同样,它也是成立的,所以表达式的值也是“True”;
- 1=2,这就有问题了,只要学过数学的人都知道这不对,1怎么可能等于2呢?这是两个不同的数字嘛,所以1=2不成立,这个表达式的结果就是“假”的,在Scratch中会把它表示成“False”,是“假”对应的英文单词。

- 如果你选择了剪刀 而且 计算机选择了布
- 如果你选择了石头 而且 计算机选择了剪刀
- 如果你选择了布 而且 计算机选择了石头


- 小猴说:“我比小猫跑得快。” 这说明小猴的名次靠前,如果用数字表示,名次越靠前,数字越小,所以小猴< 小猫;
- 小狗说:“小马在我的前面问过了终点线。” ——这意思就是小马名次在小狗前面嘛,所以小马 < 小狗;
- 小兔说:“我的名次排在小猴的前面,小狗的后面。”——这个要稍微复杂一点,说明小兔的名次在小猴前面、小狗后面是同时成立的,是“与”的关系,如果用数字表示名次,那么可以写出逻辑表达式 (小兔 < 小猴)与(小狗 < 小兔)
- 小猴< 小猫
- 小马 < 小狗
- 小兔 < 小猴)与(小狗 < 小兔)
编程
我们分别建立小狗、小兔、小猫、小猴和小马五个变量,分别代表这五个动物的名次。然后做四个重复执行的循环,在每一层让小狗、小兔、小猫、小猴依次加上1,在最里面的循环去判断名次,如果三个条件都满足(都为“真”)则显示排名,停止全部脚本(不再进行循环了),最关键的代码如下图所示:
- 为什么没有给“小马”变量也建立一个重复执行1-5的循环呢?这是因为,五个动物排名,不管每个动物的名次如何,这些动物的名次加起来都是1+2+3+4+5=15对不对?只要其它四个动物的排名确定了,用15减去他们的排名不就可以得到小马的排名了吗?由于在四个嵌套的重复执行中每次已经确定了其它四个动物的名次组合,所以我们用15-小狗-小兔-小猫-小猴,计算在这种组合下小马的排名,然后用这五个变量去建立逻辑表达式(用“条件1、条件2、条件3”表示),进行判断;
- 为什么让条件1+条件2+条件3=3作为找到答案的依据呢?这是因为在Scratch中,“真”用数字表示就是1,“假”用数字表示就是0,我们把三个布尔值加起来等于3,说明这三个值都是1,没有其它可能性。当然你也可以写成两个“与”嵌套在一起的形式来判断。
微信扫码关注
抖音扫码关注