CODEMONKEY 160-165逻辑与事件- “返回”小镇

【142-150关】CodeMonkey返回函数【上】


本节课中我们将遇到一个新的角色--可怕的乌鸦,我们将学习如何驱赶它们(一只,多只),我们将用前面学到的知识进行实践练习。

学习目标:

使用新的语法调用带有返回值的函数

在定义的函数内使用到for循环的操作

知识讲解:

1、通常我们会在函数的末尾使用return。在这种情况下,函数无论如何都会完成运行。然而,有些时候return会让函数在某个地方停止,而不是必须放到结尾,让程序都执行完。

我们来通过一个例子体验一下:从你的书包或书架上取出5本书,然后把一个卡片塞进任意一本书里。接着我们将这五本书按照随意的顺序摞起来,我们需要从这5本书里找到卡片。

我们的寻找方式是不是:从第一本开始找,找不到就继续看下一本,如果找到那么就停止。如果用伪代码写出来就是这样:

inwhichbook = () ->

for b in books

if b.hascard

return b.name

return "none"

这里在结尾处也有一个return,想一想什么时候才会执行这行代码?对,那就是你不遵守规则,并没有把卡片塞进任意一本书中。

2、下面这两种代码写法都是正确的,效果一样,但是明显第二种写法更简洁。

(1)if not crows[0].watching() and not crows[1].watching() and not crows[2].watching()

return yes

else

return no

(2)return not crows[0].watching() and not crows[1].watching() and not crows[2].watching()

实战闯关:

第160关:这一关又来了一个新朋友,乌鸦(crow),为了拿到香蕉我们必须把它吓走,还记得怎么吓走老鼠吗?对,就是用say。

【160-165关】CodeMonkey返回函数【下】

在乌鸦一直盯着【crow.watching()】的时候就不停地说话,直到把它吓走,然后去收集香蕉。

第161关:使用 say函数来吓走乌鸦吧,但是say一次乌鸦不一定会飞走,所以要使用until循环一直说,直到safe()函数返回yes。

【160-165关】CodeMonkey返回函数【下】

第162关:这一关有两只乌鸦,那么safe()函数只有在两只乌鸦都没有在监控的时候才返回yes(只要有一只乌鸦在监控就会返回 no)

【160-165关】CodeMonkey返回函数【下】

还是跟之前的关卡一样用until训话吓走乌鸦,再去拿到香蕉吧。

不过你会发现没有得到三颗星星,提示用更简短的代码来取得星星。同学们还记得“and”、“or”吗?来简化一下safe()函数里的判断语句吧。

第163关:自己根据上一关学习的知识,实现safe()函数,赶走两只乌鸦,然后再用for循环挨个去拾取香蕉。

【160-165关】CodeMonkey返回函数【下】

第164关:赶走三只乌鸦,其实很简单,我们无非在safe()函数中,当三只乌鸦都不监控时返回yes即可,只不过比两只多了一个条件而已。

【160-165关】CodeMonkey返回函数【下】

第165关:我的天这么多只乌鸦,那么我们需要用到for循环,只要有一只乌鸦在监控就返回no,只有所有乌鸦都不监控才返回yes。

【160-165关】CodeMonkey返回函数【下】

思考与练习:

1、思考:

【160-165关】CodeMonkey返回函数【下】

2、完成本节对应的特技关卡:

【160-165关】CodeMonkey返回函数【下】

答案

【160-165关】CodeMonkey返回函数【下】

【160-165关】CodeMonkey返回函数【下】

【160-165关】CodeMonkey返回函数【下】

【160-165关】CodeMonkey返回函数【下】

【160-165关】CodeMonkey返回函数【下】

【160-165关】CodeMonkey返回函数【下】

思考题答案:

【160-165关】CodeMonkey返回函数【下】