
一、知识点
(一)什么是循环?
现在我来介绍循环。循环就是把一个或者几个动作重复做很多次。比如我们想让小猫排成一行,每隔80步留个影(见图4-1)。

图4-1 小猫每隔80步留个影(左)、不用循环的脚本(中)、用到循环的脚本(右)
这个功能可以这样实现:留几个影就写几遍(见图4-1中间部分)。不过这样写太麻烦了。这里小猫只移动了4次,留了4个影子,用了8个积木块;要是走上10 000步,那得用多少积木块啊?这个程序编写起来可要等到猴年马月啊!
这时“重复执行”积木就能帮上忙了,我们用“重复执行4次”积木块,能够达到同样的效果(见图4-1中右侧图)。
在程序里的“重复执行”指的就是循环。你看这样简单吧!
(二)“重复执行”积木的种类
重复执行有三种类型:
第一种就是“重复执行”,不指定循环次数,因此会永远执行下去(也可以加上一些语句,以终止循环)。比如小猫将造型1换成造型2,走几步,然后再换回造型1走几步。这样不断重复,那么播放这段代码,就会看到一个小猫走路的动画(见图4-2)。
第二种是“重复执行……次”,事先指定重复次数。这种执行方式我们一开始就用过了,这里就不多介绍了。
第三种是“重复执行直到……”,也就是循环执行,直到满足事先指定的结束条件为止。有时候我们事先无法知道到底重复了多少次,这时候就需要用“重复执行直到……”类型了。比如我们可以让小猫不断地走,但是如果你用鼠标挡住它,它就停下了(见图4-2)。老师提醒我们,如果结束条件一开始就满足,那么循环体里的动作一次都不会执行。

图4-2 实现小猫走路的程序:永不终止版本(左)和碰到鼠标指针就终止的版本(右)
讲到这里,如果你很细心的话,会发现“重复执行……次”和“重复执行直到……”两个积木块的空格有点不一样:一个是圆形的,一个是六边形的。原来圆形空和六边形空处都要填一个参数。不过圆形空里面只能填写一个整数,叫“数字类型参数”;六边形空里要填一个条件,叫“布尔类型参数”。
“数字类型参数”就是指它的值是数字,这很好理解。“布尔类型参数”也就是真和假,判断符不符合条件。那为什么叫“布尔”,不叫“真假”或“T/F(True/False)”呢?因为这是一个叫布尔的人提出的,所以就命名为“布尔类型参数”。
(三)循环的嵌套
下面我们来讲循环嵌套。循环嵌套就是循环里面还有循环。比如图4-3是一个大循环套中循环,中循环又套小循环。你猜小猫会叫几次?

图4-3 循环的嵌套
有人会说:“这很简单,10+10+10=30(次)。”哦!这当然不对了!想想看,你走10步,让小猫在你每走一步后就对着你叫10声,那小猫共叫了多少声?
这道简单的数学题你肯定会做:10×10=100(声)啊!
循环的嵌套也是一样的道理。上面的那个循环嵌套了3次,那小猫就要重复叫10×10×10=1000(声)?
(四)写循环的小秘诀
写循环时要自问3个问题:
第1问:循环开始时变量有初始值吗?
第2问:循环结束时变量有终止值吗?
第3问:循环里,变量的值是怎样变化的?
只要在心里时刻去想这3个问题,这样做循环就不容易出错了。