少兒編程游戲CodeMonkey通關攻略:第159-165關

今天我們進入“返回”小鎮的后7關,即第159關至第165關。

應某公號粉絲要求,第162關有更仔細介紹。

先復習一下基礎知識:

基礎知識

“返回”在編程中經常用到。是每個函數必備的一部分,在我們寫完一個函數的時候,我們都習慣性地會在函數最后一行寫上return。比如:

return;

這樣就不返回任何值。當函數是一個判斷函數的時候,就可以讓函數返回判斷的結果,比如

return yes;

或者

return no;

當然,我們也可以直接返回一個判斷語句,比如:

return banana.rotten()

來判斷香蕉是否壞了,如果香蕉壞了,banana.rotten()=yes,否則banana.rotten()=no。

下面進入關卡~

第159關

return的意思就是返回,既然函數已經返回了某一個值,就不會再執行return之后的操作。

在上圖右側的代碼區域內,return no之后就不會再執行return yes。

因為我們需要小猴子goto banana,所以foo()函數返回的應該是yes。

修改后的代碼如下:

點擊運行看效果!

第160關

在這一關里,我們需要say something來嚇跑烏鴉!

在上圖右側的代碼框里,我們已有兩行代碼嚇跑烏鴉,但是在嚇跑烏鴉之后呢?

當然是讓小猴子goto banana啦!

在第3行上加上一行代碼就可以啦,如下:

點擊運行看效果!

第161關

有的時候,烏鴉耳朵有點背,所以小猴子需要不聽地say something,直到烏鴉被嚇跑為止。

我們可以用crow.watching()這個函數來判斷烏鴉是否在看著小猴子,既然crow.watching()函數是判斷語句,那么crow.watching()函數自己就會返回yes或no。

當烏鴉被嚇跑之前,crow.watching()函數返回yes,那么not crow.watching()返回的就是no。這個時候,safe()函數返回的是no。小猴子需要一直say something,直到烏鴉被嚇跑。

當烏鴉被嚇跑之后,crow.watching()函數返回no,那么not crow.watching()返回的就是yes。這個時候,safe()函數返回的是yes。

我們可以把代碼改成:

點擊運行看效果!

第162關

在上圖中,我們看到有兩只烏鴉,那么很簡單地,我們可以把上一關的代碼借鑒過來,就有一個這樣的safe函數:

在這些代碼后面,我們需要寫入判斷小猴子是否可以走向香蕉的代碼,如下:

點擊運行之后,我們先不看效果,先看結果:

只得到了兩個星星!

這是因為我們用到了很笨的方法,用了過多的代碼。

而系統要求我們用6行或者更少的代碼,才能得到3個星星!

其實我們可以壓縮safe函數。

在原來的safe函數,我們用了4行來判斷兩只烏鴉是否在看著小猴子,這是極其浪費的。

事實上,我們可以用一行就夠了。

怎么寫?

還記得我們之前學到的邏輯語句嗎?and? or?not?

因為我們要判斷兩只烏鴉是否同時都飛走了,所以我們需要用and連接兩個判斷語句。

即crows[0].watching() and crows[1].watching()。

當crows[0]和crows[1]都飛走了,那么我們有crows[0].watching()=no和crows[1].watching()=no,等價于not crows[0].watching()=yes和not crows[1].watching()=yes。于是我們有:

not crows[0].watching() and not crows[1].watching()的返回值是yes。

(yes and yes=yes,no and no=no,yes and no =no, yes or no = yes)。

下面是我給出的代碼:

點擊運行看效果!

這時候可以三星通關!

第163關

上圖中的場景和前幾關類似,只是香蕉編程了3個。這一關里,我們對香蕉可以用for循環。

不過我們還是要在第2,3行里寫入判斷烏鴉是否都飛走的代碼。

修改后的代碼如下:

點擊運行看效果!

第164關

這一關里,我們看到由三只烏鴉,這其實和前幾關沒有什么區別。

我們可以用

nor crows[0].watching() and nor crows[1].watching() and nor crows[2].watching()

來判斷三只烏鴉是否全都飛走了。

上圖右側的代碼區域如下:

修改后的代碼如下,事實上,我們并不需要判斷三個烏鴉是否全都飛走了 ,在這個代碼里,我們只用判斷烏鴉0和烏鴉2都飛走就可以了(大概是因為烏鴉按照順序飛走吧),但是在現實的情形中,我還是強烈建議用

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

來代替如下代碼框里的第3行。

點擊運行看效果!

第165關

可是如果有很多只烏鴉怎么辦?比如上圖中有5只烏鴉,難道我們要用

nor crows[0].watching() and nor crows[1].watching() and nor crows[2].watching() and nor crows[3].watching() and nor crows[4].watching()?

這樣的代碼嗎?

那如果有100只烏鴉怎么辦?

答案是,該用for循環的時候,就用for循環,循環是一個好東西。

比如在如下的代碼框里,我們就可以用for循環對烏鴉進行遍歷,對每一只烏鴉,我們都可以判斷其是否在看著小猴子。

如果烏鴉c在看著小猴子,那么c.watching()=yes.

這時候,小猴子是不能走動的,所以如果c.watching()=yes,那么safe函數應該return no。

修改后的代碼如下:

點擊運行看效果!

好啦,到現在為止,return函數的全部15關都介紹完了。


下一次,我會給大家介紹成功的“鑰匙”這一部分,一共14關,我會分2次教程介紹,每次包括7關。


順祝大家父親節快樂,過兩年我應該也可以過上這個節日了。

(關于我構思的機器學習的介紹會在以后的文章中給出,會從分類和回歸這兩個部分講起。希望大家會喜歡。)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容