二、动手练:找出最大值和最小值

(一)实验目的

用列表保存数据,并计算出最大值和最小值。

(二)基本思路

先初始化最大值和最小值,然后和每一项逐个比较,在比较过程中进行更新。

(三)编程步骤

(1)角色设计

我们采用默认角色小猫。

(2)变量设计

  • 列表num:保存输入的数据。
  • 变量max:记录列表保存数据的最大值。
  • 变量yu:表示项的序号。

(3)过程描述与脚本展示

首先,我们初始化max:只考虑第1项和第2项,我们做一次比较,就很容易知道哪个大,把大的那一项赋给max

然后,我们从第3项开始,每一项都和max比一比,如果比max大,就更新max的值(见图8-3)。

085-1

图8-3 找出最大值的程序,左侧为原始有bug的版本,右侧为改进版

(四)实验结果

我们尝试构造了不同的列表,长度不同,内容也不同,结果都正确(见表8-1)。

表8-1 找最大值程序的实验结果示例

085-2

当前这种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,要注意避免哦!