加载中...

习题 28: 布林(Boolean)表示式练习


上一节你学到的逻辑组合的正式名称是“布林逻辑表示式(boolean logic expression)”。在程式中,布林逻辑可以说是无处不在。它们是电脑运算的基础和重要组成部分,掌握它们就跟学音乐掌握音阶一样重要。

在这节练习中,你将在 IRB 里使用到上节学到的逻辑表示式。先为下面的每一个逻辑问题写出你认为的答案,每一题的答案要嘛为 True 要嘛为 False。写完以后,你需要将 IRB 运行起来,把这些逻辑语句输入进去,确认你写的答案是否正确。

1\. true and true
2\. false and true
3\. 1 == 1 and 2 == 1
4\. "test" == "test"
5\. 1 == 1 or 2 != 1
6\. true and 1 == 1
7\. false and 0 != 0
8\. true or 1 == 1
9\. "test" == "testing"
10\. 1 != 0 and 2 == 1
11\. "test" != "testing"
12\. "test" == 1
13\. not (true and false)
14\. not (1 == 1 and 0 != 1)
15\. not (10 == 1 or 1000 == 1000)
16\. not (1 != 10 or 3 == 4)
17\. not ("testing" == "testing" and "Zed" == "Cool Guy")
18\. 1 == 1 and not ("testing" == 1 or 1 == 0)
19\. "chunky" == "bacon" and not (3 == 4 or 3 == 3)
20\. 3 == 3 and not ("testing" == "testing" or "Ruby" == "Fun")

在本节结尾的地方我会给你一个理清复杂逻辑的技巧。

所有的布林逻辑式都可以用下面的简单流程得到结果:

  1. 找到相等判断的部分 (== or !=),将其改写为其最终值(True 或False)。
  2. 找到括号里的 and/or,先算出它们的值。
  3. 找到每一个 not,算出他们反过来的值。
  4. 找到剩下的 and/or,解出它们的值。
  5. 等你都做完后,剩下的结果应该就是 True 或者 False 了。

下面我们以 #20 逻辑式示范一下:

3 != 4 and not ("testing" != "test" or "Ruby" == "Ruby")

接下来你将看到这个复杂表达式是如何逐级解析为一个单独结果的:

  1. 出每一个等值判断:
    • 3 != 4 为 Truetrue and not ("testing" != "test" or "Ruby" == "Ruby")
    • "testing" != "test" 为 Truetrue and not (true or "Ruby" == "Ruby")
    • "Ruby" == "Ruby"true and not (true or true)
  2. 找到 () 中的每一个 and/or :
    • (true or true) is Truetrue and not (true)
  3. 找到每一个not 并将其逆转:
    • not (true) is Falsetrue and false
  4. 找到剩下的and/or,解出它们的值:
    • true and false is False

这样我们就解出了它最终的值为 False .

Warning: 杂的逻辑表达式一开始看上去可能会让你觉得很难。而且你也许已经碰壁过了,不过别灰心,这些“逻辑体操”式的训练只是让你逐渐习惯起来,这样后面你可以轻易应对程式里边更酷的一些东西。只要你坚持下去,不放过自己做错的地方就行了。如果你暂时不太能理解也没关系,弄懂的时候总会到来的。

你应该看到的结果

以下内容是在你自己猜测结果以后,通过和 IRB 对话得到的结果:

$ irb
ruby-1.9.2-p180 :001 > true and true
 => true 
ruby-1.9.2-p180 :002 > 1 == 1 and 2 == 2
 => true 

加分习题

  1. Ruby 里还有很多和 !===类似的操作符号。试着尽可能多的列出 Ruby 中的“等价运算符号”。例如 < 或是 <=
  2. 写出每一个等价运算符号的名称。例如 != 叫“not equal(不等于”。
  3. 在 IRB 里测试新的布林逻辑式。在敲 Enter 前你需要喊出它的结果。不要思考,凭自己的第一直觉就可以了。把表达式和结果用笔写下来再敲 Enter,最后看自己做对多少,做错多少。
  4. 把习题 3 那张纸丢掉,以后你不再需要查询它了。

还没有评论.