13. 逻辑之旅

13.1 目标

  • 复习基本逻辑
  • 实践逻辑表达式
  • 学习真值表

13.2 简单的逻辑表达

正如我们所了解,逻辑表达要么”是( True )”,要么”否( False )”. TrueFalse 就是它的值. 下面是生活中的实际例子,试着回答是( True )或否( False ):

  1. “我今年12岁.”
  2. “我父亲是教师.”
  3. “我的学校Karel课程的合作伙伴.”

下面是Karel中的例子:

  1. wall ... True 如果机器人前面是墙, 否则False.
  2. gem ... True 如果机器人正下方有宝石, 否则False.
  3. tray ... True 如果机器人正下方是托盘, 否则False.
  4. north ... True 如果机器人面朝北, 否则False.
  5. home ... True 如果机器人在家方块, 否则False.
  6. empty ... True 如果机器人的包是空的, 否则False.

13.3 复杂的逻辑表达

在编程和日常生活中,我们经常遇到更复杂的逻辑表达.

通常将两个或更多简单逻辑表达用”和(and)”,”或(or)”,”非(not)”组合在一起形成复杂的逻辑语句.

比如,语句”我星期日去滑雪,如果天气好并且Michael和我一起去.”,此句包含三个简单的逻辑表达,为明了我们将它分开:

A = “我星期日去滑雪.”

B = “天气好.”

C = “Michael和我一起去.”

这涉及B和C的逻辑与(and)运算,原始语句可以写为:

if B and C then A

编程中崇尚这种简洁的表达,这可以使代码更短. 我们可以预测未来,知道周末天气很好而且Michael会一起去. 于是将上述语句翻译为如下代码,并打印出A的值:

# Let’s say that weather will be good
# and Michael will join you:
B = True
C = True
# This is how you decide:
if B and C
  A = True
else
  A =False

# Print the result:
if A
  print "I will go ski on Sunday."
else
  print "I will not go ski on Sunday."

输出:

I will go ski on Sunday.

13.4 真值表

真值表给出不同逻辑语句的运算结果. 逻辑与(and)的真值表为:

A B A and B
False False False
True False False
False True False
True True True

逻辑或(or)的真值表为:

A B A or B
False False False
True False True
False True True
True True True

逻辑否(not)的真值表为:

A not A
True False
False True

最后,语句”if A then B”的真值表为:

A B if A then B
False False True
False True True
True False False
True True True

有人会对最后一个真值表感到奇怪.他们问:为什么当A为非时,表达式”if A then B”是真的? 但事实如此. 考虑一个例子:”如果地球是平的,那么月球也是平的.”这个表达是真的,这句话本身没有什么错误.因为地球不是平的,所以基于”地球是平的”作出的任何推断就没有什么关系了.