← StudyX Devlog

用解谜来理解与、或、非(AND、OR、NOT)

Hiroki ObaraHiroki Obara · DeveloperMath Gates使用指南
用解谜来理解与、或、非(AND、OR、NOT)

AND(与)、OR(或)、NOT(非)是计算机判断条件时用到的最基本的操作,叫作逻辑运算。孩子一开始学编程,马上就会以“如果 A 并且 B”“如果 A 或者 B”的形式遇到它们。

名字听起来很难,内容却和日常用语几乎一样。这篇文章用身边的例子说明这三种操作,再把它们变成在家就能玩的谜题。

真和假

逻辑运算处理的不是数,而是“对还是不对”。对的叫作“真”,不对的叫作“假”。英语是 true 和 false。

“今天在下雨”这句话,下雨天是真,晴天是假。“7比10大”永远是假。逻辑运算就是把这种真或假的答案组合起来,或者反过来的操作。

NOT(非):反过来

NOT 把真变成假,把假变成真。

如果“在下雨”是真,“没在下雨”就是假;如果“在下雨”是假,“没在下雨”就是真。中文里的“不”“没”,就相当于 NOT。

连续两次 NOT,就回到原来的样子。“不是没在下雨”,和“在下雨”是一个意思。这和数学里乘两次 −1 就回到原数有点像。

AND(与):两个都满足

AND 只有在两个条件都为真时才是真。中文里就是“并且”。

想一条规则:如果在下雨,并且很冷,就穿大衣出门。只有又下雨又冷的日子才穿大衣。下雨但暖和的日子,或者冷但晴天的日子,都不穿。

把这条规则的所有组合列成表。这样的表叫作“真值表”。

在下雨 很冷 穿大衣(AND)
真 真 真
真 假 假
假 真 假
假 假 假

四行里只有一行是真。可以说,AND 是让条件变严格的操作。

OR(或):只要有一个

OR 只要两个条件中有一个为真,就是真。中文里就是“或者”。

想一条规则:如果在下雨,或者风很大,就不骑车,改成走路。

在下雨 风很大 走路(OR)
真 真 真
真 假 真
假 真 真
假 假 假

这次四行里有三行是真。OR 是让条件变宽松的操作。

这里有一个孩子常常弄错的地方,就是第一行:又下雨、风又大的日子。逻辑上的 OR,两个都为真时也是真。可是日常说的“或者”,像“咖啡还是红茶”那样,常常是二选一的意思。我觉得最好明确说一次:逻辑上的 OR 是“其中一个,或者两个都”。只有一个为真时才为真的操作另有名字,叫 XOR(异或)。

用开关电路来想

用电池、小灯泡和开关组成的电路来想,AND 和 OR 的区别就看得见了。

把两个开关串在同一条路上(串联),只有两个开关都合上,灯泡才亮,这就是 AND。把两个开关分别放在两条路上(并联),合上其中任何一个,灯泡就亮,这就是 OR。把“开关合上”当作真,把“灯泡亮”当作真,结果和上面的真值表完全一样。

我认为这个比喻很值得用。因为在计算机内部,真正做逻辑运算的,正是非常小的电子开关的组合。这与其说是比喻,不如说几乎就是事实。

在家能玩的语言谜题

不需要任何工具,用语言就能做成谜题。

指着屋里的东西问:“哪些东西又红又圆?”这是 AND。苹果符合,红色的书或白色的球不符合。接着问:“哪些东西是红的或者圆的?”这是 OR,苹果、红色的书、白色的球都符合。

让孩子来出题也很有意思。请他“用 NOT 出一道题,让屋里只有一样东西符合”,就会出现“不是方的,而且在桌子上的东西”这样的题。把条件组合起来,把答案缩小到一个,这和编程时写条件用的是同一种思考方式。

熟练之后,还可以出难一点的题。“不是(又红又圆)的东西”和“不红或者不圆的东西”,指的是同样的东西吗?答案是一样的。这叫作德摩根定律。即使不知道名字,用屋里的东西验证一下,孩子也能体会到。

和编程的联系

很多学校使用的 Scratch 里,有“与”“或”“不成立”这几个积木,它们就是 AND、OR、NOT。把它们放进“如果……那么”积木里,就能做出这样的条件:如果按下空格键,并且碰到了地面,就跳起来。

条件不按预想运行时,我建议画一张真值表。写出四行,确认每种情况下希望发生什么,就能发现是不是把 AND 和 OR 弄反了,或者 NOT 放错了位置。日本小学编程教育的目标,写在日本小学的编程教育学什么里;解谜能培养的思考方式,写在什么是计算思维里。

Math Gates 的“逻辑电路”

Math Gates 是我做的一款回路解谜游戏。在盘面的空格里放上改变数值的“门”和让路线转90度的“镜子”,然后按“运行”,带着数字的比特就会沿直线前进。终点的出口只接收满足条件的值。

七个世界中的最后一个“逻辑电路”,讲的就是这篇文章的内容。比特经过 v>n、v<n 这样的比较门,数就会变成真或假。接着经过 NOT、AND、OR 逻辑门,最后以满足出口条件的值到达,就算成功。有的出口以“真”为条件。放下棋子的那一刻,比特的路线和数值的变化就会用虚线画在盘面上,所以在运行之前,就能用眼睛追踪真和假在哪里翻转。过关后,会得到一张发现卡,给你刚才做的事情配上名字和式子。

一共7个世界140道题,面向8岁以上。可以免费玩,过关之间会有广告,一次性购买可以去除广告。玩法写在 Math Gates 上手指南 里。

我认为,与、或、非并不是计算机专用的特别词语,而是给我们平时说的“并且”“或者”“不”,赋予了严格的形式。

在 App Store 下载