第四章 Blockly之選擇結構
來自專欄 blockly
今天,我們通過一個遊戲來學習選擇結構,遊戲的地址如下:
https://blockly-games.appspot.com/bird?lang=en本遊戲分為10關:主要遊戲規則如下:①主界面是遊戲的運行界面,我們需要通過控制代碼來讓鳥叼完蟲子後回到鳥窩,並保證不撞到牆。②代碼主要由選擇結構和邏輯判斷組成。③點擊下方的Run Program按鈕後程序就會執行右側的代碼。回到鳥窩後,遊戲結束,順利通關。
你可以先嘗試著看看鳥應該怎樣去運動,並如何調用代碼塊。稍後我們將會詳細介紹關於選擇結構的各種語法。1.
2.
3.
4.
5.
6.
8.
9.
10.
4.1 關係運算符和關係表達式
關係運算是邏輯運算中比較簡單的一種,所謂的關係運算實際上就是比較運算,將兩個值進行比較,從而判斷比較的結果是否滿足符合的條件,比如關係表達式a>5,如果a為6,那麼表達式成立,結果就是真,反之,如果a的值為-1,那麼表達式不成立,結果就是假。
4.1.1關係運算符及其優先順序
我們有如下6種關係運算符:>,<,≥,≤,==,!=
優先順序次序如下:(1)前四種的優先順序順序高於後兩種,前四種優先順序相同,後兩種優先順序相同。(2)關係運算符的優先順序低於算術運算符。(3)關係運算符的優先順序高於賦值運算符。舉幾個例子:(1)c > a+b c > (a+b)
(2)a > b == c (a > b) == c
4.1.2關係表達式
關係表達式的結果有兩個,如下圖所示,真和假(非真)。
我們需要注意「=」和「==」的區別:
「=」表示賦值語句,比如a = 5,是把5賦值給變數a「==」是邏輯判斷,比如a == 5,是表示變數a的值是否和5相等,如果相等就返回真,反之返回假,我們的blockly如下圖所示,邏輯判斷「==」寫成了「=」,是為了方便大家去理解,但實際上你要知道這兩者是有區別的,細心的讀者打開blockly轉換到代碼就會發現代碼中顯示的都是「==」。4.2 邏輯運算符和邏輯表達式
4.2.1邏輯運算符及其優先順序
邏輯運算符包括與、或、非,在我們的blockly中,如下圖所示去表示分別為和、或、非。
邏輯和,a 和 b,當且僅當a,都為真時,結果為真。
邏輯或,a 或 b,只要a,b中有一個為真,結果就為真。邏輯非,非 a,如果a為真,則結果為假,如果a為假,那麼結果為真。我們用圖表的形式來表示如下:aba and ba or bnot a真真真真假真假假真假假真假真真假假假假真
(1)非邏輯,即非在三種運算符中優先順序最高。
(2)邏輯「和」和「或」優先順序相等,低於非邏輯4.2.2邏輯表達式
邏輯表達式的值應該是真或假,下面我們一起通過一個例子來了解下邏輯表達式在選擇結構中的作用:
我們知道在平年中2月份是28天,閏年中2月份是29天,那麼怎樣去區分平年和閏年呢?我們可以通過如下的流程圖來進行判斷:閏年的條件是符合下面二者之一:
①能被4整除,但不能被100整除 ②能被4整除,又能被400整除 在blockly中有兩種除法,一種是普通的除法,一種是取余除法,如下圖所示:普通除法直接進行計算,而取余除法將是將未整除的數保留下來,只取整數部分,並沒有小數部分。
我們用符號/來表示除法,用%來表示取余,&&表示「和」,||表示「或」,!表示「非」。
那麼閏年就可以這樣來表示: (year % 4 == 0 && year % 100 !=0)|| year % 400 == 0 那麼非閏年就直接在前面加一個!符號就好了 !((year % 4 == 0 && year % 100 !=0)|| year % 400 == 0) 轉化為代碼就是這樣:4.3 條件語句-if
4.3.1選擇結構之if語句
Blockly中的if語句表示選擇條件,如果滿足條件就執行「......」語句,在if的左側有一個設置按鈕,點開後可以添加else if和else語句,表示多重判斷,你可以將左側的模塊兒拖到if下面就形成了其它三種語句。
比如這個例子: 班裡面要做一個成績統計,成績在90分以上就輸出A,在80-90分之間就輸出B,80分以下輸出C:
我們進行到這裡這個程序你大致就應該明白了上面的代碼究竟寫的是什麼內容,第一句話就是從鍵盤獲取一個分數賦值給score這個變數,如果90 < score < 100那麼就輸出A,在80 < score <90之間輸出b,其餘的輸出c。 <center="" stylex="color: #333333;">
我們把剛才閏年的那個例子用編程來實現:
運行結果如下:
是不是挺簡單的呢?下面我們將前面學習的東西鞏固下,並將訓練的難度進行升級:
①創建兩個變數,並比較這兩個數的大小。②創建三個變數,分別通過鍵盤複製,並將這三個數由小到大輸出。解析:①我們比較兩個數的大小時,有三種情況,大於小於和等於,因此就要用到if條件語句進行兩次判斷,剩下的一種情況直接用else即可, 「to result append text」這個語句是字元串追加的意思,就是我們不僅僅只輸出一個數字,而是輸出整個結果,比如2>1,2=2,2<3這樣的結果。輸出結果如下所示:
②三個數比較大小時,情況就比較複雜了,還要從小到大進行輸出,這就不僅僅需要進行比較了,而且還需要進行排序,這就需要了解在程序中怎樣去交換兩個變數,我們來舉一個現實中的例子,現在我們有兩杯水,我們怎樣去交換這兩杯水呢?
答案是顯然的,我們需要藉助第三個空杯,我們把他們編號A,B,C。
那麼交換A,B兩杯水,需要以下步驟:(1)把A中的水倒入C(2)把B中的水倒入A(3)把C中的水倒入B我們的程序也是這樣,交換兩個變數也需要藉助第三個變數,剩下的就簡單了,只要兩兩比較就可以了,因為要從小到大輸出,所以只要前者大於後者將兩個數交換就可以了。4.3.2選擇結構的嵌套-if嵌套
if嵌套語句實際上就是在if語句裡面還有if語句,實現了嵌套,我們剛才講的平年閏年的問題其實也可以用嵌套的方法來解決:
首先判斷year能否被4整除,如果能被4整除,再判斷能否被100整除,這時可能還不是閏年,還要再進行判斷,如果能被400整除那就是閏年,不能就是平年。4.4選擇結構在生活中的應用
其實我們在平時上網的時候網頁中存在著很多的選擇結構,比如說登陸註冊界面,我們以qq的登陸界面為例子,如下圖所示:
①qq中的昵稱是可以隨意的,你可以和別人的昵稱是相同的,所以在昵稱這欄我們在後台只需要判斷是否存在非法字元就可以了,如果存在非法字元就在後面顯示一個小「×」,如果昵稱合法,就顯示一個對號「√」。
②qq中密碼的判斷較為複雜,它分為三個等級,每輸入一個字元後程序都會對其進行判斷,如下圖所示,每次判斷後合格的項就會打勾,而且兩次密碼必須是一致的,判斷是在第二次輸入密碼確定的。
③生日、所在地這些都是需要進行選擇的,我們需要在後台將所有的信息輸入到選擇文本中去,這樣用戶只要直接進行選擇就可以了。
④當所有的信息全部填寫完成,還要進行一次大的判斷,就是所有條件全部滿足時,即所有條件全都為真時,就會顯示註冊成功,否則就會彈出必須還要填寫什麼必要信息。理解嵌套循環了么,現在我們再來回顧開篇的例子,看看你能否做出答案。參考答案如下:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
課後練習
1.寫出下面各邏輯表達式的值。設a=3,b=4,c=5。
(1)a+b>c && b==c(2)a || b+c && b-c(3)!(a>b) && !c||1(4)!(x=a) && (y==b) && 0(5)!(a+b)+c-1 && b+c/22.給一個不多於五位的正整數,要求:(1)求出它是幾位數;(2)分別閥引出每一位數字;(3)按照逆序列印出各位數字,例如原數為321,應輸出123。知識梳理
BLOCKLY系列教程:
第一章 Google Blockly教學應用手冊
第二章 Blockly編程基礎
第三章Blockly順序程序設計
第四章 Blockly之選擇結構
第五章 循環結構
第六章 Blockly的進階
Blockly編程案例
推薦閱讀:
※讓少兒編程跳出編程的圈子(一)
※少兒編程|三歲的孩子就可以用電腦製作火柴人
※小碼王:少兒編程教育機構,你選對了嗎?
※16家少兒編程公司半數已獲Pre
TAG:少兒編程 |