筛选数据

您所在的位置:网站首页 筛选后面没有数字统计 筛选数据

筛选数据

2024-07-08 20:51| 来源: 网络整理| 查看: 265

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第164讲。

第15届蓝桥杯第3次STEMA测评已于2023年12月17日落下帷幕,编程题一共有6题,分别如下:

多变的太阳

转动的风车

六花阵图

变色游戏

筛选数据

消失的水母

筛选数据,本题是2023年12月17日举行的第15届蓝桥STEMA测评Scratch编程初/中级组编程第3题,题目要求编程对数据的一串数据按要求进行筛选。将用户输入的8个正整数中的偶数加入列表1并求和,再将列表1中各位数字和为偶数的数字加入列表2,并获取最大值。

先来看看题目的要求吧。

一.题目说明

背景信息:

偶数:能被2整除的数。

各位上的数字之和:一个整数各个数位上的数字相加的结果。

例如:2314,各位上的数字分别为2、3、1、4,各位上的数字之和为2 + 3 + 1 + 4 = 10。

编程实现:

筛选数据。

具体要求:

1). 每次点击绿旗,熊猫说“输入8个正整数”,同时在舞台下方显示输入框,输入的正整数之间用一个空格隔开,列表1和2为空,如图所示;

例如:输入10 26 17 18 24 31 48 52

图片

2). 输入完成后,如果输入的数中没有偶数,程序结束,如果有,就把偶数保存到列表1中,如图所示; 

图片

3). 熊猫说出列表1中所有数的和,如图所示;

图片

4). 然后,在列表2中呈现列表1中所有各位上的数字之和为偶数的数(按照列表1的顺序),如图所示,如果没有满足要求的数,程序结束;

图片

5). 最后,熊猫说出列表2中最大的数,如图所示。

图片

评判标准:

8分:满足"具体要求"中的1);

20分:满足"具体要求"中的2);

12分:满足"具体要求"中的3);

30分:满足"具体要求"中的4);

10分:满足"具体要求"中的5)。

二.思路分析

本题只有1个熊猫角色,如图所示:

图片

而且熊猫只负责说出结果,没有其它的效果,因此本题是一个典型的算法题,考查的是列表处理和数学运算。

根据题目的描述,我们可以将整个过程分成如下5个核心功能:

字符串拆分

奇偶数判断

列表求和

统计数字各位数字和

求最大数

这里的关键是第一步,后面所有的程序都是在这个基础上进行的。通过询问框,获取用户输入的数字串,然后将每个数字提取出来并存入列表,这是一个常见的需求场景,在历届蓝桥比赛中出现过多次,比如:

《魔法师盖城墙-第11届蓝桥杯Scratch国赛真题第4题

《数字与图形-第13届蓝桥杯Scratch国赛真题第5题》

字符串拆分的核心思想就是遍历整个字符串,依次取出每一个字符并进行连接,当遇到空格时,得到一个数字,加入列表,然后再进行下一个数字的连接,直到取出所有的数字,具体的细节这里就不再展开了。

一旦解决了第一步,后面的相对就容易一些了,主要就是对列表的操作和处理了,基本上就是结合循环和变量对列表进行遍历,然后对每个数字进行判断和处理。

由于代码比较多,超平老师强烈建议采用函数的编程思想,使用自制积木来组织代码,从而简化代码的逻辑和结构。

思路有了,接下来,我们就进入具体的编程实现环节。

三.编程实现

根据上面的思路分析,我们分7步来编写程序:

准备工作

字符串拆分

构造列表1

列表1求和

构造列表2

计算列表2最大值

主程序

1. 准备工作

准备工作比较简单,先创建好两个列表,分别命名为“1”和“2”,然后在绿旗下,清空两个列表,在熊猫角色中编写代码如下:

图片

2. 字符串拆分

接下来是熊猫询问并等待用户输入,用户输入的数字会保存到“回答”指令中,如图:

图片

这是一个字符串,我们要逐个取出每个字符,通常需要结合循环和变量,其基本框架如下:

图片

这段代码的作用是依次取出回答中的数字串,逐个进行连接,并保存到数字中,其中变量”数字“表示要获取的单个数字,变量"i"是计数器。

这当然是不够的,在循环的过程中,如果字符是空格,就应该将其加入列表中,同时将”数字“变量设置为空,增加判断代码如下:

图片

强调两点:

1). 将“数字”变量设置为空,直接删除默认的数字0即可;

2). 在判断字符等于空的时候,需要打一个空格。

执行代码,结果如下:

图片

已经将各个数字拆分开了,但是最后一个数字52并没有加入列表,原因很简单,52后面没有空格,针对这种情况,需要在循环结束后再单独”数字“变量的值加入列表,如图:

图片

这样一来,就可以确保,所有的数字都可以加入列表。

但是,需要注意的是,这段代码只适用于标准输入,即数字之间只有一个空格,结尾也不能有空格,不过题目没有特别要求,可以不用考虑非标准输入。

本着严谨的态度,我们还是对非标准输入进行探讨和处理,如果输入的是如下内容:

图片

其中,10和26、17和18、24和31之间各有两个空格,52后面还有一个额外的空格,列表中的数据就是这个样子的:

图片

这显然是不对的,所以在向列表中插入数字的时候,还需要判断数字不为空,这又该如何判断呢?

“数字”变量的值,可能是一个空格,也可能是多个空格,其实有一个巧妙的办法,就是使用大于指令,如果变量的值都是空格,无论空格的数量是多少,它都是不大于0的。

所以只需要在插入列表之前增加如下代码:

图片

再次查看列表,效果如下:

图片

有了这个判断,就相当于增加了一层保险,再也不用担心多个空格的问题了。

3. 构造列表1

字符串拆分已经完美实现了,现在只剩下最后一步了,上面的代码是将所有的数字加入列表1。根据题目的要求,还需要过滤一下,只有偶数才加入列表1,因此在插入之前,再增加一个条件就可以了。

为了方便,我们将上面这部分代码使用自制积木来实现,代码如下:

图片

代码中标红的部分就是用来判断偶数的,如此一来,关键的第一步就彻底处理好了。

4. 列表1求和

这一步相对比较简单,一般来说有两种处理方式:

在构造列表时同步进行,每插入一个偶数就累加一次;

构造列表后单独处理,使用循环累加;

相对来说,前者代码更少,为了方便讲解,我这里采取第二种方法,同时将其定义成一个自制积木,代码如下:

图片

简单说明两点:

1). 这里的变量"和",用来表示总和,需要将初始值设为0;

2). 这里再次使用了"i"变量,这是可以的,不过要重新初始化为1。

5. 构造列表2

在构造列表2时,需要对列表中1中的每个数字进行各位数字求和,因此,我们可以分两步来实现:

对给定数字进行各位求和;

对列表1中的数字逐个判断;

为了简化代码,我们使用自制积木来组织代码,先来实现第一步,定义自制积木如下:

图片

代码不多,说明两点:

1). 在Scratch中,数字可以直接作为字符串来处理,结合循环可以取出数字中的每一位数字; 

2). 由于Scratch中的自制积木没有返回值,所以这里将各位上数字的和保存到变量”各位数字和“中。

有了这个自制积木,接下来就可以对列表1进行循环处理了,其代码如下:

图片

强调一点,由于在循环的过程中,又调用了自制积木,相当于是循环中嵌套循环,因此需要使用两个计数器变量,一个是"i",一个是"j"。

执行完这段代码,就可以将列表1中满足条件的数字加入到列表2了。

6. 计算列表2最大值

这和前面求和的情况类似,有同步和分开处理两种方式,为了方便,这里仍然分开处理,将其定义成一个自制积木,代码如下:

图片

简单说明两点:

1). 获取最大值就是一个逐步比较的过程,如果当前项比最大值,则更新最大值,直到循环结束。

2). 由于所有的数字都是正整数,所以可以将最大值设置为0;

7. 主程序

所有的自制积木都定义好了,只需要按照题目的要求进行组装即可,代码如下:

图片

代码比较简单,强调一点,就是如果列表1和列表2为空时,要提前终止代码。

至此,整个作品就创作好了,是时候来测试程序的功能了,测试时需要多来几组数据,确保程序的正确性。

四.总结与思考

本题是初/中级组编程部分第5题,分数为80分,积木块数量100个左右,涉及到的知识点主要包括:

Scratch问答指令;

循环编程;

条件编程,包括单分支和双分支;

变量的使用;

列表的运算;

字符串的运算及处理;

这是初级组最后一题,难度较大,完成时间25分钟左右,难点在于如何将数字串进行拆分,获取其中的每一个数字。

从最近几次STEMA测评真题的题目来看,对字符串和列表的考查越来越多了,也越来越难了,这需要引起我们的重视。

对于本题而言,有三个核心知识必须要熟练掌握:

如何对字符串进行拆分和遍历;

列表的运算和遍历;

使用自制积木来组织代码,简化程序结构;

实际上,字符串和列表的处理也是代码编程的基础和重点,一旦熟练掌握这些数据结构的常见处理和算法,对后续代码编程的学习非常有帮助。

超平老师给你留一道思考题,对于字符串为空的判断,你还有其它方法吗?

如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄

需要素材和源码的,可以移步至“超平的编程课”gzh。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3