<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 4.比較與邏輯 ### 4.1。 邏輯運算符 邏輯運算符使你可以確定天氣是否正確。 例如,一個就是一個,那就是人類的想法,讓我們看看計算機對此的想法。 發射你的 irb 并輸入 1 等于 1,如圖所示 ```rb >> 1 == 1 => true ``` 好吧,那等于符號的兩倍呢? 單個等于號表示分配,例如`a = 5`,將值`5`放入`a`。 雙等于符號是比較。 因此,以上我們檢查了 1 是否等于 1 且答案為`true`。 電腦是智能的,不是嗎? OK,現在讓我們檢查 1 是否等于 2,所以我們輸入`1==2`和... ```rb >> 1 == 2 => false ``` 計算機(在這種情況下為 Ruby 解釋器)告訴計算機`false`。 很好,如果在我們鍵入計算機時 1 與計算機不等于 2,則必須輸出 true,因此請在控制臺中鍵入 ```rb >> 1 != 2 => true ``` `!=`代表不等于。 ! 代表不 現在我們檢查 1 是否不等于 1,并且計算機按預期給出`false`作為輸出。 ```rb >> 1 != 1 => false ``` 現在,我們檢查 2 是否大于 3,對于大于,我們使用`&gt;`符號 ```rb >> 2 > 3 => false ``` 現在,我們將檢查 2 是否小于 3,因為小于`&lt;`符號 ```rb >> 2 < 3 => true ``` 涼! 我們發現如果 2 不大于 3,則其小于 3。那么我們將獲得數學諾貝爾獎:) `&gt;=`代表大于或等于 ```rb >> 5 >= 3 => true ``` 由于 5 大于 3,因此返回`true` 參見下面的表達式,因為 5 等于 5,它仍然返回`true` ```rb >> 5 >= 5 => true ``` 5 不大于 5,因此在下面返回 false ```rb >> 5 > 5 => false ``` 3 小于 5,因此小于或等于運算符`?`返回 true ```rb >> 3 <= 5 => true ``` 3 等于 3,因此小于或等于運算符仍返回 true ```rb >> 3 <= 3 => true ``` 3 不小于 3,等于 3,因此小于運算符返回`false` ```rb >> 3 < 3 => false ``` 你也可以嘗試使用數字 <colgroup><col style="width: 50%;"> <col style="width: 50%;"></colgroup> | 操作員 | 含義 | | ! &lt; | 不小于 | | ! &gt; | 不大于 | 他們工作嗎? ;) ### 4.2。 true!=“ true” 在邏輯運算符部分,你可能會看到 irb 提供`true`或`false`作為輸出。 你不要與`“true”`和`“false”`混淆。 `true`和`false`是邏輯值,而`“true”`和`“false”`是`String`。 ### 4.3。 === `===`運算符用于檢查特定實例 &lt;sup class="footnote"&gt;[ [12](#_footnotedef_12 "View footnote.") ]&lt;/sup&gt; 是否屬于一類(即類型)。 例如,`“abc”`是`String`類型的對象,`1`是`Integer`,因此讓我們在其上應用`===`并檢查 ```rb >> String === "abc" => true >> Integer === 1 => true ``` 從上面的示例中可以看到,我們在左邊有類名,在右邊有實例。 前兩個示例為`true`,因為`“abc”`為字符串,`1`為整數。 ```rb >> String === 7 => false ``` 在上面的示例中,由于`7`絕對不是`String`,因此它顯然返回 false,這就是你可能會想到的;) 但是有些奇怪,請看下面的例子 ```rb >> "abc" === String => false ``` 因此,始終將類放在左側,將實例放在右側。 ### 4.4。 如果 如果滿足條件,則使用 if 關鍵字執行語句。 看看下面的程序。 執行它。 ```rb # if.rb puts "Whats your name?" name = gets.chop puts "#{name} is genius" if name == "Zigor" puts "#{name} is idiot" if name != "Zigor" ``` 如果你輸入的名稱不是 Zigor,結果將會是這樣 ```rb Whats your name? Karthik Karthik is idiot ``` 看一下程序。 看一下下面這行 ```rb puts "#{name} is genius" if name == "Zigor" ``` 該程序在名為`name`的變量中獲取你的名字。 現在,它檢查上面代碼中名稱是否為 Zigor(在關鍵字`if`的右側),如果是,則執行與之關聯的語句(即關鍵字`if`的左側的語句) ),在這種情況下,它會打印出特定的名稱是 genius。 然后歸結為下一條語句 ```rb puts "#{name} is idiot" if name != "Zigor" ``` 在此語句中,它檢查名稱是否不是 Zigor,如果是,則打印名稱為 idiot。 ### 4.5。 如果別的 讓我們以另一種形式編寫 who genius 程序,這里我們使用 if else 條件代替`if`。 看一下下面的名為 if_else.rb 的代碼 ```rb # Zigor says if the person is intelligent or not print "Enter your name: " name = gets.chop if name == "Zigor" puts "#{name} is intelligent" else puts "#{name} is idiot" end ``` 程序在執行時會提供與先前的 if.rb 相同的輸出,不同之處在于程序內部邏輯的表示方式。 我們看到一個叫做`if name == "Zigor"`的東西,然后在代碼正確的情況下執行該操作,如圖所示 ```rb if name == "Zigor" puts "#{name} is intelligent" ``` 現在,我們可以在之后放置任意數量的語句,如果滿足給定的條件,則所有語句將被執行。 到目前為止,還不錯,但是 Ruby 如何知道 if 語句在哪里結束呢? 為了說到此為止,我們如下所示放置了`end`關鍵字。 ```rb if name == "Zigor" puts "#{name} is intelligent" end ``` 假設`if`中給出的條件不滿足,我們需要做一些`if`條件無效的操作,然后將條件失敗時執行的語句放在`else`關鍵字下,如下所示 ```rb if name == "Zigor" puts "#{name} is intelligent" else puts "#{name} is idiot" end ``` 請注意,`else`和條件失敗時需要執行的語句位于`end`語句之前。 結束標記`if else`塊的結束。 不一定總是需要其他,而是可以有一個如下所示的代碼 ```rb if <condition> # many lines of code goes here end ``` 在上面,你可以在`if … end`塊中放入許多需要執行的代碼。 ### 4.6。 埃爾斯夫 當我們使用`if`和`else`時,如果滿足條件,則將執行`if`下的代碼,否則將執行`else`部分下的代碼。 讓我們有一個新的場景,其中`if`下的代碼不滿足,然后程序立即跳轉到`else`部分,現在邏輯要求我們也需要在`else`級別檢查另一個條件,我們應該怎么做? 做? 為了應對這種情況,我們可以使用`elsif`命令。 看看下面的代碼 ```rb # elsif.rb # finds the greatest of three numbers a,b,c = 3,7,5 if a >= b and a >= c puts "a = #{a} is greatest" elsif b >= c and b >= a puts "b = #{b} is greatest" else puts "c = #{c} is greatest" end ``` 執行后會產生以下結果 ```rb b = 7 is greatest ``` 讓我們逐步瀏覽代碼。 讓我們看看這條線 ```rb a,b,c = 3,7,5 ``` 在這一行中,我們為變量`a,b`和`c`分配值 3、7 和 5。 現在來看 if 語句 ```rb if a > b and a > c ``` 在此語句中,我們檢查`a`是否大于`b`和`a`是否大于`c`。 注意關鍵字`and`。 僅當兩個條件都為真時,才滿足`if`條件。 `a`小于`b`,因此此條件失敗,因此程序跳過`if`語句并進入`elsif`語句 ```rb elsif b > c and b > a ``` `elsif`是`else`加`if`,在這里我們檢查由`and`分隔的另外兩個條件,我們檢查`b `is greater than `a`和`b`是否大于`c`,兩者均為真,因此 `elsif`下的聲明 ```rb puts "b = #{b} is greatest" ``` 得到執行,我們得到結果。 由于`elsif`滿足其他`else`的要求,并且其下的代碼也將被忽略。 ### 4.7。 如果那樣的話 還有另一個條件構造,它的 if 稱為 if then else,它與 if else 并沒有太大區別,下面出于理論目的顯示了一個示例,就我個人而言,它并沒有任何實際目的,但是出于理論上的考慮 將示例放在下面,執行并親自查看。 ```rb #if_then_else.rb number = 42 if number % 2 == 0 then puts "Even" else puts "Odd" end ``` ### 4.8。 除非 除非是檢查狀況的另一種方法。 假設一個人是未成年人,除非他或她大于 18 歲。 那么如何在 Ruby 中編碼呢? 考慮下面的程序,在文本編輯器中鍵入并執行它。 ```rb # unless.rb print "Enter your age:" age = gets.to_i p "You are a minor" unless age >= 18 ``` 執行后,這就是我們得到的 ```rb Enter your age:16 "You are a minor" ``` 程序會詢問你的年齡,如果年齡不大于 18,則表示你是未成年人。也就是說,除非你的年齡大于或等于 18(如在此情況下所示),否則你將是未成年人`unless age &gt;= 18`。 `p`是看跌期權 &lt;sup class="footnote"&gt;[ [13](#_footnotedef_13 "View footnote.") ]&lt;/sup&gt; 的簡稱。 如果編寫`puts “something”`,則紅寶石解釋程序將打印`something`。 如果你使用`p ”something”`,則紅寶石解釋器將打印`”something”`(這與這些引號一起使用)。 如果我們想在`unless`塊下放置多行代碼,可以使用`unless …?. end`塊,如下所示 ```rb unless <condition> # many lines of code goes here end ``` 如果`&lt;condition&gt;`失敗,則執行塊中的代碼。 可以認為`unless`與`if`相反。 如果 if 塊被執行`if`的條件是`true`,則`unless`塊被執行的條件是`false`。 ### 4.9。 除非另有 就像`if`和`else`一樣,我們可以在`unless`語句中使用`else`。 輸入以下程序并執行 ```rb # unless_1.rb print "Enter your age:" age = gets.to_i unless age >= 18 p "You are a minor" else p "You are a grown up" end ``` 這是執行時得到的 ```rb Enter your age:37 "You are a grown up" ``` 好的,這是它的工作原理,你可以確定年齡,將其轉換為`age = gets.to_i`中的整數,并將其存儲在名為`age`的變量中。 專注于這段代碼: ```rb unless age >= 18 p "You are a minor" else p "You are a grown up" end ``` 除非`age`小于 18 `“You are a minor”`不會被打印出來。 如果年齡大于或等于 18,則將其路由到`else`語句,并打印`“You are a grown up”`。 請注意,如果將`else`與`unless`一起使用,則必須使用`end`命令終止`unless`塊。 現在讓我們看一下另一個使用`unless else`的程序。 我們想招募人員來武裝,這個人應該在 18 到 35 歲之間,我們的計劃向想要入學的人詢問詳細信息,檢查其年齡并告知結果。 在下面輸入程序并執行 ```rb # unless_2.rb print "Enter your age:" age = gets.to_i unless age < 18 or age > 35 p "You can enter Armed forces" else p "You cannot enter Army. You are either too young or too old" end ``` 執行時將是結果 ```rb Enter your age:23 "You can enter Armed forces" ``` 我認為你可以自行解釋該程序。 如果沒有其他聯系方式,除非我很懶,否則我會寫一個解釋。 ### 4.10。 情況何時 假設你要編寫一個程序,該程序對于確定的輸入具有確定的輸出,則可以在以下情況下使用這種情況。 假設我們要編寫一個拼寫為 1 到 5 的程序,我們可以按照 code / case_when.rb [case_when.rb]中所示的方法進行操作,在文本編輯器中鍵入該程序并執行。 ```rb # case_when.rb # This program spells from one to five print "Enter a number (1-5):" a = gets.to_i spell = String.new case a when 1 spell = "one" when 2 spell = "two" when 3 spell = "three" when 4 spell = "four" when 5 spell = "five" else spell = nil end puts "The number you entered is "+spell if spell ``` 輸出量 ```rb Enter a number (1-5):4 The number you entered is four ``` 讓我們看看上面的程序是如何工作的。 首先,提示用戶輸入數字,當他輸入數字時,在以下語句中將其從字符串轉換為整數 ```rb a = gets.to_i ``` 變量`a`現在包含我們輸入的數字的值,我們具有`case`語句,如下所示 ```rb case a …...... end ``` 在上面的空 case 語句中,我們將編寫根據`a`的值執行的代碼。 當`a`為 1 時,我們需要將其拼寫為`“one”`,因此我們添加以下代碼 ```rb case a when 1 spell = "one" end ``` 同樣,我們添加代碼直到大小寫為 5,如圖所示 ```rb case a when 1 spell = "one" when 2 spell = "two" when 3 spell = "three" when 4 spell = "four" when 5 spell = "five" end ``` 在某些情況下,運行此程序的人員可能會輸入錯誤的信息,因此我們也需要處理這些情況。 為此,我們添加了一個名為`else`的特殊語句,如果所有情況都失敗了,則執行 else 下的代碼,但是必須注意,在`case … end`塊之間沒有`else`是強制性的。 所以現在程序更改如下所示 ```rb case a when 1 spell = "one" when 2 spell = "two" when 3 spell = "three" when 4 spell = "four" when 5 spell = "five" else spell = nil end ``` 接下來,我們要做的就是打印出`spell`,我們在以下語句中這樣做 ```rb puts "The number you entered is "+spell if spell ``` 請注意,僅當`spell`包含值時才打印,否則,如果`spell`為`nil`,則不打印任何內容。 上面聲明中的`if`條件要小心。 有時可能有必要針對許多條件執行同一組語句。 讓我們以一個示例應用程序為例,在該應用程序中,程序確定 1 到 10(包括兩者)之間的數字是奇數或偶數。 鍵入下面的代碼(code / case_odd_even.rb [case_odd_even.rb])并執行 ```rb # case_odd_even.rb num = 7 # put any number from 1 to 10 case num when 1, 3, 5, 7, 9 puts "#{num} is odd" when 2, 4, 6, 8, 10 puts "#{num} is even" end ``` Output ```rb 7 is odd ``` 注意,在上面的程序中,我們為變量`num`分配了值 7,接下來,我們將`num`放入`case`語句中。 當數字為 1、3、5、7 和 9 時,我們需要打印其奇數,因此我們要做的只是對個案進行分組。 如果滿意,則必須將其打印為`odd`,如果你按照下面的代碼所示放置,就足夠了 ```rb case num when 1, 3, 5, 7, 9 puts "#{num} is odd" end ``` 接下來,我們只需要打印數字,即使該數字是 2、4、6、8 和 10,要做到這一點,我們要做的就是添加下面突出顯示的代碼 ```rb case num when 1, 3, 5, 7, 9 puts "#{num} is odd" when 2, 4, 6, 8, 10 puts "#{num} is even" end ``` 而已。 該代碼適用于從 1 到 10 的所有數字。故事的寓意是,我們可以輕松地將案例分組并在其中執行通用代碼。 ### 4.11。 情況下,檢查類類型 在 Ruby 中,一切都是對象。 讓我們在 irb 中嘗試一些例子來證明這一點 ```rb >> 1.class => Integer >> "Zigor".class => String ``` 在第一條語句中,我們查詢了`1`的類/對象類型,并說其類型為`Integer`。 當被問及`“Zigor”`的類別時,它說`String`。 在 Ruby 中,你可以使用此函數來了解所使用的類型變量。 它是一個非常強大的功能。 現在看看下面的程序 ```rb # case_when_checking_class_type.rb a = "Zigor" case a when String puts "Its a string" when Fixnum puts "Its a number" end ``` Output ```rb Its a string ``` 參見上面程序中的行,我們有兩個語句,例如`when String`和`when Integer`,這將檢查`case a`語句中變量`a`的類型。 如果變量類型為`String`,它將在`when String`事物下執行語句,而當其為`Integer`時,將執行另一個語句。 由于此`a`是 String 類型的,因此我們得到了打印輸出`Its a String`。 ### 4.12。 情況和范圍 請檢查以防萬一。 ### 4.13。 情況以及正則表達式 Case 語句也可以匹配正則表達式。 閱讀正則表達式部分以了解以下示例。 ```rb # case_when_regexp.rb string = "I Love Ruby" # string = "I Love Python" case string when /Ruby/ puts "string contains Ruby" else puts "string does not contain Ruby" end ``` Output ```rb string contains Ruby ``` 在上面的示例中,檢查語句`when /Ruby/`,它會檢查表達式`/Ruby/`出現在`string`中。 在上面的示例中,它確實出現了。 因此它打印出`string contains Ruby`。 ### 4.14。 情況何時和 lambdas 在 [case_odd_even.rb](code/case_odd_even.rb) 中,當我們嘗試檢查數字是否為奇數或偶數時,我們給出了一個冗長的程序,其范圍限制為 1 到 10 之間的數字。 我們可以編寫如下所示的相同程序 ```rb # case_odd_even_lambda.rb num = 76 case num when -> (n) { n % 2 == 0 } puts "#{num} is even" else puts "#{num} is odd" end ``` Output ```rb 76 is even ``` 要理解以上示例,你必須先閱讀 Proc,Lambda 和 Blocks。 觀看代碼`when → (n) { n % 2 == 0 }`,在其中將一個 lambda 傳遞給`when`,當調用該代碼時,它將為`n`的值 76 或任何偶數返回`true`,如果`n`為奇數則返回`false` 。 因此,與以前的奇偶程序不同,它適用于從零到無限的所有自然數。 ### 4.15。 case 和 matcher 類的情況 要了解下面的程序,你需要閱讀===并檢查案例類型時的大小寫。 在下面輸入程序并執行 ```rb # case_when_matcher_classes.rb class Zigor def self.===(string) string.downcase == "zigor" end end name = "Zigor" case name when Zigor puts "Nice to meet you Zigor!!!" else puts "Who are you?" end ``` Output ```rb Nice to meet you Zigor!!! ``` 考慮這一部分 ```rb case name when Zigor puts "Nice to meet you Zigor!!!" else puts "Who are you?" end ``` `case`語句檢查`name`并查看其實例類型是否為`Zigor`。 嗯,這并不奇怪嗎? 怎么可能 屬于`String`類的一個實例如何變為`Zigor`類的一個實例? 好吧,情況是什么,它調用了`Zigor`類中的`===`方法,其定義可以在 &lt;sup class="footnote"&gt;[ [14](#_footnotedef_14 "View footnote.") ]&lt;/sup&gt; 下看到。 ```rb def self.===(string) string.downcase == "zigor" end ``` 在這里我們定義`self.===`,在其中接受一個參數字符串,在這里傳遞給`case`的`name`被復制到`string`,并檢查`string`的`downcase`是否等于`“zigor”` 在`string.downcase == "zigor"`中,如果是,則返回`true`,否則返回`false`。 如果`true`被執行,當 when Zigor 塊中的代碼被執行時,我們得到輸出`Nice to meet you Zigor!!!`。 將名稱更改為其他值,然后看看會發生什么。 如果你現在不了解此章節,請不要擔心。 在完成本書的復習之后,你可能會更好地理解它。 ### 4.16。 ? : `? :`被稱為三元運算符。 它可以用作簡單的`if`。 請執行以下所示的程序。 專心`max = a &gt; b ? a : b` ```rb # max_of_nums.rb a,b = 3,5 max = a > b ? a : b p "max = "+max.to_s ``` 執行后,程序給出以下輸出 ```rb "max = 5" ``` ?:的工作原理如下。 它的語法是這樣的 ```rb <evaluate something > ? <if true take this thing> : <if false take this thing> ``` 你在問號之前給出一個表達式。 該表達式必須返回`true`或`false`。 如果表達式返回 true,則`it`返回`?`和`:`之間的內容;如果`false`,則返回`:`之后的內容。 在表達中 ```rb max = a > b ? a : b ``` 我們可以如下替換`a`和`b`的值 ```rb max = 3 > 5 ? 3 : 5 ``` 3 不大于 5,因此其`false`。 因此,將`:`之后的值分配給`max`。 因此,`max`變為 5。 ### 4.17。 將邏輯語句分配給變量 不管你是否注意到了天氣,在前面的示例 [max_of_nums.rb](code/max_of_nums.rb) 中,我們使用了這樣的語句 ```rb max = a > b ? a : b ``` 這里`a &gt; b`是邏輯,如果它的`true`它將返回`a`,該`a`被分配給`max`,或者它返回`b`,其被分配給`max`。 現在相同的程序可以編寫如下 ```rb # max_of_nums_with_if.rb a, b = 3, 5 max = if a > b a else b end p "max = " + max.to_s ``` Output ```rb "max = 5" ``` 此處將變量`max`分配給`if`條件。 因此,如果`a`大于`b`,則會將`a`放入`max`,否則會將`b`放入`max`。 就如此容易。 現在還有另一件事。 如果`if`或`else`下還有其他語句怎么辦? 由于在此代碼塊中 ```rb max = if a > b a else b end ``` 在`if`塊下只有一個語句`a`,在`else`塊下我們只有`b`,所以它很簡單。 現在讓我們嘗試下面給出的示例 ```rb # max_of_nums_with_if_many_statements.rb a,b = 3,5 max = if a > b a + b a else a - b b end p "max = "+max.to_s ``` 運行上面的程序,這就是你得到的 ```rb "max = 5" ``` 那么要推斷什么呢? 規則是這樣的,如果你在一個塊中給出許多語句并將其分配給一個變量,則最后一條語句的輸出將被返回并將被放入變量 &lt;sup class="footnote"&gt;[ [15](#_footnotedef_15 "View footnote.") ]&lt;/sup&gt; (在這種情況下為最大值)。 這是另一個程序, [case_when.rb](code/case_when.rb) 的分支,我想你知道它現在如何工作 ```rb # case_when_2.rb # This program spells from one to five print "Enter a number (1-5):" a = gets.to_i spell = String.new spell = case a when 1 "one" when 2 "two" when 3 "three" when 4 "four" when 5 "five" else nil end puts "The number you entered is " + spell if spell ``` 運行并親自查看。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看