CODEMONKEY 151-159邏輯與事件- “返回”小鎮
本節課我們將回顧兩個比較重要的知識點:1、帶有返回值的函數比如rotten()、sleeping()、playing()這些都是已經為我們定義好的;2、自定義函數?,F在我們將開始學習如何定義一個帶有返回值的函數。
學習目標:
學習并練習定義帶有返回值的函數。
回顧帶有參數的函數function(argument)的
知識講解:
我們已經在前面的課程中學習了函數的返回值,比如sleeping(),如果老虎睡著了返回yes,否則返回no。我也學會了定義函數(如goto()),但是我們沒有告訴這些函數返回任何值。今天我們將學習如何編寫一個帶有返回值的函數。這需要用到return關鍵字,return語句允許函數指定返回值,返回給調用函數的代碼。
偽代碼示例:
function 發燒了嗎= (體溫) ->
if 體溫> 37.2
return yes
else
return no
實戰闖關:
第151關:自定義函數example()函數使用return關鍵字返回yes或者no。
如右側代碼,返回的是banana.rotten(),那么我們觀察香蕉并沒有腐爛,所以return返回的結果就是no。
我們再看主程序,如果example()返回真,那么去收集,否則轉個圈。因此我們就需要稍作修改,讓example()飯回一個yes。也就是說,如果香蕉沒有腐爛就去收集,否則轉個圈。
第152關:自定義函數返回值都是由return來決定的,因此我們定義的時候一定要想清楚。
這一關我們根據之前的經驗,就是用for循環,然后判斷香蕉有沒有腐爛,然后決定去不去收集。我們再看右側代碼,這里調用 yummy() 函數來判斷 b 是不是美味的,b是作為參數傳入的,因此這個函數就需要在香蕉沒有腐爛時返回yes,否則返回no。還有一點就是,如果香蕉不美味就別過去了。
第153關:小猴要拿到香蕉必須先去休息區,回復體力,這樣才不會被大猩猩砸暈,因此我們需要完善右側程序,調用healthy()函數,如果健康就返回yes,只有這個時候才可以出發,不然就要繼續休息了。
第154關:當小猴的體力小于70,injured()函數返回yes。體力等于100那么healthy()函數返回yes。
這一關我們之前挑戰過,只不過本關我們要使用定義好的兩個函數來完成,使程序更簡潔。思路還是:for循環去收集香蕉,如果小猴的體力小于70就返回休息區恢復體力直到100再繼續去收集。注意:本關在for循環內有判斷語句,里面還有until循環,層級比較多,注意代碼的縮進。
第155關:這一關需要做的就是修復自定義函數healthy()
右側代碼已經提示主程序是沒有問題的,如下圖
看一下主程序部分,先去休息區,在healthy()返回yes之前一直休息,然后前往草叢,去收集香蕉。我們很容易猜到讓healthy()在體力等于100時返回yes對吧。再看healthy()函數,他用了一個大于號,那么health()大于多少跟等于100是一樣的效果呢(體力上限100),試試看。
第156關:我們之前學習過帶參數的函數,就是使用一個()里面傳入參數。
小猴只有等到安全了才能去取香蕉,對于本關來說小猴只有等老虎睡著或者在玩耍的時候才能去收集香蕉。
再看右側代碼,主程序直到safeFrom函數返回yes才能去收集香蕉。那么這個safeFrom什么時候返回yes?就是a(也就是傳入的對象tiger)睡著或者玩耍時返回yes,那么完善這個帶參數函數,即可順利過關了。
第157關:這一關多了一個熊,小猴要拿到香蕉必須等到老虎和熊都安全時才能出發。
再看右側的程序,提示主程序是正確的。
這里until循環停止的條件就是safeFrom(tiger) and safeFrom(bear)我們看到調用的是同一個函數safeFrom()但是參數不同,分別表示tiger安全、bear安全。那么我們需要修復這個函數,返回的就是傳入的對象在睡覺或者在玩耍。
第158關:我們從本關可以看到,bananas[0]是腐爛的香蕉,bananas[1]是好香蕉。
我們的工作就是自己完成兩個函數的定義,并給出正確的返回,如右側代碼所示:
因為我們知道bananas[0]是腐爛的,所以不能去收集,那么if條件里的函數negative()就要返回no,同理positive()函數要返回yes。檢查一下這兩個函數返回的結果對嗎?
第159關:在一個函數 function 里面,所有寫在返回 return 指令后面的內容都不會被執行。
我們運行一下,發現小猴沒有去拾取香蕉,因為foo()函數返回了no,雖然再最后return yes,但是在return no后不會被執行。那么就把不正確的那個返回注釋掉吧。
答案:
本站內容未經許可,禁止任何網站及個人進行轉載。