本章我們學習比較數據、計算邏輯表達式以及使用這些結果在程序中做決定。隨后使用它們做一些實用的案例。本章學習的內容如下:
解決問題的基本技巧
使用如果…那么和如果…那么…否則 選擇不同的行為
根據條件構造並求解邏輯表達式
使用分支語句控制程序流程
我們之前接觸的程序執行模式很單一:首先執行第一塊積木,然后執行下一塊積木,直到腳本結束積木是依次執行的,在順序上沒有任何變化。
但是在許多編程場景中,你可能需要改變程序執行的流程。例如,在測試算術題的程序中,當回答正確時,你需要一段特定的腳本給予獎勵;當回答錯誤時,你需要另一段不同的腳本表示答案錯誤(可能是顯示正確答案。者再給一次機會腳本的行為取決於用戶的輸入與正確答案的比較結果,這便是用邏輯做決定的含義。
在本章中,我們將學習 Scratch中可以做決定的積木,然后使用它們測試用戶的輸入並執行不同的行為。
首先介紹Scratch的比較操作符,說明如何比較數字、字母和字符串。隨后介紹如果…那么和如果…那么…否則積木,說明它們對做決定發揮的關鍵作用。接着介紹如何使用嵌套的如果…那么和如果…那么…否則積木測試多個條件,並使用這種結構制作以菜單驅動的程序。接下來講解測試多個條件的另一種方法邏輯操作符。最后將綜合以上內容制作幾個有趣的案例。
我們做每一件事其實都是一個決定,不同的決定通常會引導我們采取不同的行動。Scratch也允許做各種各樣的決定。
使用關系操作符就能比較兩個變量或者表達式的大小關系,即大於、小於、等於。
此操作符也叫關系操作符,因為它用來測試兩個值之間的關系。
布爾值是什么?
是其中一種數據類型,即布爾型,我們在第五章第一節中學過。它僅有兩個值:真或假,即True或 False。通常用於條件判斷,當條件成立時就是True,條件不成立時就是False。
上圖中的積木塊都是六邊形的,我們在第五章中講過六邊形意味着積木塊的求值結果是非直即假的布爾值,因此這種表達式也叫作布爾表達式。下面我們來看看Scratch中的布爾表達式是如何求值的。
布爾表達式的求值
新建三個變量X、Y、Z,並將X設為5,Y設為10
(1) X>Y嗎?顯然5>10不成立,表達式結果為False
(2) X<Y嗎?顯然5<10成立,表達式結果為True
(3) X=Y嗎?顯然5=10不成立,表達式結果為False
比較字符和字符串
假設我們正在設計一個猜字母的游戲,玩家需要不停地猜測,直到猜中A到Z中的某個字母。游戲首先會讀取玩家猜測的字母,然后與正確的字母進行比較,最后根據字母表順序告訴玩家繼續猜測或者猜測正確。如果正確的字母是G,而玩家輸入了B,游戲就告訴玩家“在B之后”,即正確的字母在字母B之后。如何將正確的字母與用戶的輸入進行比較,從而給出相應的提示信息呢? Scratch的關系操作符可以比較字母,如圖6-1所示。 Scratch是根據字母表順序進行字母大小的比較。由於字母A在字母B之前,因此表達式A<B返回true。但是一定要注意,字母間的比較與其大小寫無關,即大寫字母A與小寫字母a是相同的。因此,表達式A=a將返回true。
明白了如何比較字母后,我們就能使用如下的條件語句測試玩家的猜測內容:
如果(猜測的字母=正確的字母),那么說正確
如果(猜測的字母>正確的字母),那么說在猜測的字母之前
如果(猜測的字母<正確的字母),那么說在猜測的字母之后
所謂條件語句,是指這種格式的語句:“如果條件為真,那么采取這種行為”。在下一節,我們再來學習如何使用 Scratch實現條件語句,現在我們先關注這個猜字母的游戲。
如果正確的字母不是單個的,而是多個字母時會發生什么呢? 例如,玩家猜測的是某種動物的名稱,我們還能使用關系操作符比較字符串嗎?當然是可以的。但是 Scratch是如何比較如 elephant>mouse的表達式呢?下圖說明了字符串的比較規則。
左:比較字符串大小時,會忽略大小寫;因此,它認為字符串“HELLO”與“hello”是相同的。
中:空格也是字符串的一部分,因此空格也要參與比較;因Y的HELLO前面有個空格,所以是不一樣的字符。
右:當比較“ABC”和“ABD”時, Scratch首先比較兩個字符串的第一個字符。因為第一個字符都是相同的A, Scratch繼續比較兩個字符串的第二個字符。因為第二個字符又是相同的,因此,接着比較第三個字符。因為字母C小於字母D(因為在字母表中C在D之前), Scratch最終認為第一個字符串小於第二個字符串。
現在你知道布爾表達式 elephant>mouse的結果了嗎?雖然大象(elephant)比老鼠( mouse)的體積大很多,但是這個表達式求值的結果卻是 false。這是因為根據 Scratch的字符串比較規則,字母e位於字母m之前。使用字母序比較或排列字符串在現實生活中是很常見的,如有序的目錄列表、書架上的書籍、字典中的單詞等。在字典中,單詞elephant出現在單詞 mouse之前,Scratch的字符串比較規則也給出了相同的答案。
現在來總結一下:
(1)比較字符串大小時,會忽略大小寫;
(2)空格也是字符串的一部分,因此空格也要參與比較;
(3)比較字符串時,是按照字母一個一個來比較的;
我們已經理解了Scratch如何使用關系操作符比較數字和字符串,下面就來學習條件語句吧!