- 少儿计算思维养成记:六个孩子的编程学习笔记
- 包若宁等编著
- 972字
- 2025-02-23 14:12:08
二、动手练:找出最大值和最小值
(一)实验目的
用列表保存数据,并计算出最大值和最小值。
(二)基本思路
先初始化最大值和最小值,然后和每一项逐个比较,在比较过程中进行更新。
(三)编程步骤
(1)角色设计
我们采用默认角色小猫。
(2)变量设计
- 列表
num
:保存输入的数据。 - 变量
max
:记录列表保存数据的最大值。 - 变量
yu
:表示项的序号。
(3)过程描述与脚本展示
首先,我们初始化max
:只考虑第1项和第2项,我们做一次比较,就很容易知道哪个大,把大的那一项赋给max
。
然后,我们从第3项开始,每一项都和max
比一比,如果比max
大,就更新max
的值(见图8-3)。

图8-3 找出最大值的程序,左侧为原始有bug的版本,右侧为改进版
(四)实验结果
我们尝试构造了不同的列表,长度不同,内容也不同,结果都正确(见表8-1)。
表8-1 找最大值程序的实验结果示例

当前这种max初始化方法要求列表中至少有2项,如果列表中只有1项的话,程序会出bug。一种改进方法是:预先判断一下有几项,当只有1项时直接返回第1项,是空表时则报错。
另外,在用户输入数据时,循环的控制条件是“重复执行回答次”,而循环体内又更新了“回答”,会导致“重复执行回答-2次”时循环次数出错。比如用户输入6个数,分别是7,8,9,10,11,3,最后一次“回答”是3,因此程序只会执行“3-2次,即1次循环,导致错误地输出“最大值是9”。改正方式是另外创建一个变量,表示“多少个数”。修正bug之后的版本如图8-3中右侧部分所示。
(五)思考与延伸
(1)你可以想一想有没有更多关于列表的题目?
比如,2020年哪些天是星期日?这个题目是不是也可以用列表来算呢?只是比较复杂,我们在以后的课程中可能会学到哦!
(2)为什么一定要用列表?什么时候不用列表就不行?
我们认为有些情况不用列表也是可以的,但是会特别麻烦,因为需要创建很多变量,做起来会有很大难度。而且不用列表的话,很容易在编程中混淆不同的变量,产生一些错误。
还有一些情况,是根本无法用变量来解决的。比如我们这节课要询问“有几个数”,这时数是事先不确定的,也就是说变量的数目不确定,那怎么创建变量呢?这种情况就只能用列表啦!
(3)如果一个列表中存了10个数字,但是去除第11项,会发生什么呢?
试一下就知道列表不会发生变化,这是因为列表中没有第11项,所以本来想删除的那一项就不会被删除。不过这样做可是不安全的,会对后面的计算产生bug,要注意避免哦!