[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第177讲。
如果想持续关注Scratch蓝桥真题解读,可以点击《Scratch蓝桥杯历年真题》并订阅合集,查阅教程更方便。
第15届蓝桥杯第5次STEMA测评已于2024年3月10日落下帷幕,编程题一共有6题(初级组只有前5道编程题),分别如下:
-
熊猫左右转
-
返回地球
-
吐丝的蜘蛛
-
最大的三位数
-
记忆力考验游戏
-
回文数
最大的三位数,本题是2024年3月10日举行的第15届蓝桥STEMA测评Scratch编程初/中级组编程第4题,题目要求编程创作最大的三位数作品。黑板上有一个四位数,请擦除其中一个数字,使得剩余数字组成的三位数最大。
先来看看题目的要求吧。
一.题目说明
编程实现:
最大的三位数。
黑板上有一个四位数,请擦除其中一个数字,使得剩余数字组成的三位数最大。
具体要求:
1). 点击绿旗,黑板上显示一个随机的四位数,如图所示;
例如:随机的四位数为7971。
2). 1秒后,老师说“请擦除一个数字”,如图所示;
3). 鼠标点击黑板擦后,黑板擦会持续跟随鼠标移动,如图所示;
4). 把黑板擦移动到想要擦除的数字上,点击鼠标左键,黑板擦会在该数字处上下滑动擦除该数字;(参考视频)
5). 黑板擦在擦除的过程中,该数字越来越模糊,最终留下一个很浅的痕迹,如图所示;(参考视频)
6). 之后黑板擦回到最初的位置,如图所示;
7). 如果擦除后得到的三位数最大,那么老师说“正确”;
8). 如果擦除后得到的三位数不是最大的,那么老师说“错误”。
评判标准:
-
8分:满足"具体要求"中的1);
-
2分:满足"具体要求"中的2);
-
8分:满足"具体要求"中的3);
-
10分:满足"具体要求"中的4);
-
6分:满足"具体要求"中的5);
-
2分:满足"具体要求"中的6);
-
12分:满足"具体要求"中的7);
-
12分:满足"具体要求"中的8)。
二.思路分析
本题提供了3个角色,分别是数字、老师和黑板擦,如图所示:
其中,数字角色有10个造型,分别表示10个数字,如图:
本题考查的知识点比较多,包括克隆、运动、事件广播和变量等。
我们可以分角色来分析,其中老师角色最简单,他就像一个主持人一样,负责开场和收尾,开始说了一句”请擦除一个数字“,最后判断擦除的数字是否正确。
其次是黑板擦角色,有两个小功能,一是在鼠标点击后跟随鼠标移动,二是上下移动,模拟擦除的动作。
数字角色是这里的重头戏,看起来好像只是一个简单的克隆和变淡效果,实际上还包含大量的数据处理和逻辑判断。
此处,超平老师需要强调一个重要的编程思想-数据驱动显示,即先有数据,然后再考虑角色的显示效果。
数据处理和逻辑判断是本作品的难点,我们可以从拆分成如下3个小模块:
1). 随机一个四位数
2). 计算出最大的三位数
3). 计算擦除任意数字后的三位数
第一步,比较简单,直接使用变量,并通过随机指令进行初始化,范围是1000~9999,如下:
第二步,要计算最大的三位数,其实就是分别去掉千位、百位、十位和个位,然后逐个比较一遍,就可以得到最大的三位数。
比如,随机得到的四位数是5648,得到的三位数分别为:
去掉千位:648
去掉百位:548
去掉十位:568
去掉个位:564
经过比较,可以发现最大的三位数是648,注意不是去掉最小数字就可以得到最大三位数的。
具体如何比较呢,这个可以结合第三步一起考虑。
第三步,计算擦除任意数字后的三位数,还是以四位数5648为例进行说明:
擦除第1个数字:648
擦除第2个数字:548
擦除第3个数字:568
擦除第4个数字:564
看到这里,你想到了什么?
是不是和前面获取最大三位数时去掉千位、百位、十位和个位完全一样,难道要重新再来一遍?
很显然,这是不必要的,在编程中,使用变量(包括列表)可以避免做一些重复的工作。
不妨使用一个列表,将三位数按顺序依次保存起来,如下:
有了这个列表,就要方便多了,遍历整个列表,就可以找到最大的三位数。更重要的是,当擦除任意个数字时,我们只需要知道该数字是第几个,就可以直接通过编号获取擦除后的三位数了。
如何知道是第几个数字呢,其实也非常简单,在克隆的时候,使用私有变量,给每个数字进行编号,从左到右依次为1、2、3、4。
如此一来,在擦除某个数字的时候,就可以通过编号获取擦除后的三位数了,再使用变量保存起来,如下:
只需要一行代码就可以了,是不是非常的巧妙。
最大的三位数和擦后的三位数都有了,老师角色在判断的时候,就可以根据这两个变量是否相等来提示正确和错误了。
思路有了,接下来,我们就进入具体的编程实现环节。
三.编程实现
根据上面的思路分析,我们分5步来编写程序:
-
随机四位数并获取最大三位数
-
克隆数字
-
老师提示擦除数字
-
黑板擦擦除数字
-
老师判断结果
1. 随机四位数并获取最大三位数
首先,创建两个变量“四位数”和“最大三位数”,将四位数设置为1000~9999之间的随机数。
再建立一个列表“三位数”,将4个三位数保存到列表中。由于计算最大三位数的代码有点多,我们创建一个自制积木来简化代码结构。
创建自制积木并编写代码如下:
代码比较多,简单说明两点:
1). 为了方便,这里创建了4个变量,分别用来表示四位数的千位、百位、十位和个位;
2). 列表在使用之前一定要清空;
3). 在向列表中插入数据的时候,一定要注意组合的顺序,确保是依次去掉千位、百位、十位和个位;
4). 在获取最大三位数时,先将最大值设置为0,然后遍历列表逐一比较,并更新最大值。
执行这段代码,就可以获取最大三位数,并将擦除后的4个三位数保存到列表中了。
2. 克隆数字
有了四位数,就可以根据四位数来克隆数字了,为了方便,我们使用自制积木来组织代码,对应的代码如下:
代码不多,强调一点,这里的_ID是私有变量,用来给数字进行编号,编号依次为1、2、3、4。
然后在数字角色的绿旗指令中编写代码如下:
注意代码的顺序,必须是先设置变量,接着调用“获取最大三位数”积木,最后是“克隆数字”。
对应的,设置好克隆体的造型,并显示,代码如下:
执行代码,就可以看到克隆好的四位数字了,如图:
3. 老师提示擦除数字
接下来,是老师提示要擦除数字,这一步非常简单,切换到老师角色,编写代码如下:
4. 黑板擦擦除数字
黑板擦开始位于黑板左下方,在鼠标点击后会跟随鼠标移动,在碰到某个数字时点击鼠标才停止下来。
切换到黑板擦角色,编写代码如下:
代码不多,但非常有技巧性,强调两点:
1). 点击黑板擦,不要使用”当角色被点击“指令,避免反复点击;
2). 对于循环,能使用”重复执行直到“指令,就不要使用”重复执行“指令,代码会简单不少。
然后就是擦除的效果,分为两个部分,一是黑板擦的上下移动效果,二是数字的变淡效果。
而且这两个动作是同步的,需要在黑板擦移动之前给数字角色发送一个广播消息。
为方便起见,我们先实现黑板擦的移动效果,在上面的代码块下面,继续编写代码如下:
代码不难,说明四点:
1). 一定要在重复移动之前发送“擦除”广播,确保数字变淡和黑板擦擦除的效果是同步的;
2). 上下移动的方式,除了改变y坐标,还可以使用滑行指令,确保效果一致即可;
3). 在擦除结束后,黑板擦要回到黑板左下方;
4). 整个动作完成后,发送了一个“判断”的广播,这个也可以放在数字角色中;
对应的,切换到数字角色,编写代码如下:
代码比较简单,强调两点:
1). 由于所有的数字克隆体都能接收广播消息,因此需要判断,只有碰到黑板擦的数字才是我们需要的;
2). 虚像特效增加的大小和次数可以自行调整,确保效果和参考视频一致即可;
5. 老师判断结果
最后一步,比较简单,老师角色在接收到”判断“的广播后,比较两个变量即可。切换到老师角色,编写代码如下:
至此,整个作品就创作好了,赶紧运行程序看看效果吧。
四.总结与思考
本题是初/中级组编程部分第4题,分数为60分,积木块数量108个左右,涉及到的知识点主要包括:
-
运动编程;
-
克隆编程;
-
变量,尤其是私有变量;
-
事件广播机制;
-
列表的灵活运用;
本题难度较大,综合性非常强,完成时间30分钟左右。这里的难点是如何判断擦除是否正确,具体来说就是如何获取最大的三位数及擦除后的三位数。
我们巧妙地使用列表将所有的三位数保存到列表中,一来便于比较得到最大的三位数,二来可以直接获取擦除后的三位数,可以说是一举两得,这就是列表的强大和美妙之处。
再来说说考试策略问题,这道题可以说是本次测评中最难的一道题目,不少考生花费了大量时间,结果还是完成得不好,碰到这种情况该怎么办呢?
其实,每一次考试都有可能出现这种情况,最难的一题(准确来说,是对你来说最难的一题)并不是总是最后一题。
面临这种情况,一不要硬抗到底,摆出一副不做出来不罢休的架势,二不要直接跳过,干脆避而不见。
最佳策略是以最快的时间完成一部分,对于本题而言,题目要求有8条,如果去掉最后两条要求,是不是就简单多了。
争取把前面的部分都完成,也可以拿到36分了。而最后的两条要求一共是24分,但是会花掉你30分钟的时间,肯定不划算,你要知道,后面的题目分值更高呢,切不可因小失大。
超平老师给你留一道思考题,如果我们找到四位数中的最小数字,然后判断擦除的数字是否为最小数字,能否行得通呢,为什么?
如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄
需要素材和源码的,可以移步至“超平的编程课”gzh。