阐明 while 循环中的逻辑语句 AND 和 OR
Clarification of logical statements AND and OR in a while loop
AND
和 OR
语句在 while 循环中表现异常
var a = 0;
var b = 0;
while (a < 3 && b < 3) {
if (a < 3) {
a = a + 1
console.log(a)
console.log("Ende")
} else if (b < 3) {
b = b + 1;
console.log(b);
}
}
现在,您会期望 while 循环会完成它的工作,直到 AND
语句中的两个变量都达到 3。然而事实并非如此,它会一直工作直到 a
达到 3,然后停止。
为什么?
如果将其更改为 OR
运算符,则直到两个变量都达到 3 时才会停止。
又是为什么?
实际上这个行为在数学上是正确的。不幸的是,英语有时会使 and
和 or
模棱两可。
考虑条件:
a < 3 && b < 3
您对英语的直觉使您认为:
Now, you would expect that a while loop will do its job until both variables reach 3
但这是错误的。只要两个变量都小于 3,条件就会起作用。这显然意味着,如果任何变量达到 3,则条件为假。即使在英语语法中也是如此,但由于 AND 和 OR 与列表交互的常见用法(逻辑上不正确)的使用方式而变得混乱。
首先让我们考虑一下正确的用法:
a < 3 && b < 3
- 这意味着
- 两个条件都必须为真(AND的定义)
a
不得达到3
b
一定不能达到3
因此table的真相是:
a b result
-----------------------------
< 3 < 3 true
3++ < 3 false // AND requires both to be true
< 3 3++ false // however OR only requires one to be true
3++ 3++ false
一旦你写下 AND 的真相 table 你就会明白为什么如果任何变量达到 3 它必须停止循环。
现在让我们看看英语是如何混淆事物的。我想指出,严格来说,英语语法与 AND 和 OR 的数学定义一致,但从技术上讲,即使每个人都凭直觉理解其含义,但常见用法在技术上是错误的(每个人都以某种方式神奇地忽略了逻辑)。
在英语中,如果我们有一个列表,我们想要列表中的所有内容(比如购物清单),我们使用 and
加入列表:
I want an orange, an apple AND a banana
上面这句话要求一个人把三个水果都买下来
另一方面,如果我们有一个选项列表,我们会用 or
:
加入它
You can either walk OR drive there
严格来说,实际规则是,如果您希望列表的所有部分都存在 true/to,那么您可以使用 AND 连接它,如果您只需要列表的至少一部分是 true/exist 你用 OR 加入它。但这不是说英语的人解释 AND 和 OR 的方式。我们非正式地使用以前的定义想要一切或想要一些东西。
当涉及到否定时,这个细微的差别就变成了一个主要问题(小于也会触发它)。非正式地,我们理解以下内容:
I don't want apples, I don't want oranges AND I don't want bananas
as - 如果有一个苹果、一个橙子和一个香蕉,那么上面的人就不会高兴了。但正确的解释是,即使我们没有给他橙子和香蕉,如果给他一个苹果,这个人也不会高兴。这是因为他想要none个,他没有说他只是不想三个水果一起吃,但不介意一个香蕉。
现在让我们考虑以下问题:
I don't want an apple and an orange.
第一眼看上去和上面的句子一样,只是更短。但是逻辑上还是有区别的。在这种情况下,此人表示他不想要带橙子的苹果,但可以接受不带橙子的苹果。
AND 和 OR 在列表中的行为方式听起来相似但含义截然不同,因此有一个名字。它其实在布尔代数中有一个定理:叫做DeMorgan's Theorem。这其实很明显,但乍一看似乎并不那么明显。
它指出:
( NOT A ) AND ( NOT B ) is the same as NOT ( A OR B )
和
( NOT A ) OR ( NOT B ) is the same as NOT ( A AND B )
这就是为什么有时当 AND 不能像您认为的那样工作时,将它更改为 OR 突然工作。
AND
和 OR
语句在 while 循环中表现异常
var a = 0;
var b = 0;
while (a < 3 && b < 3) {
if (a < 3) {
a = a + 1
console.log(a)
console.log("Ende")
} else if (b < 3) {
b = b + 1;
console.log(b);
}
}
现在,您会期望 while 循环会完成它的工作,直到 AND
语句中的两个变量都达到 3。然而事实并非如此,它会一直工作直到 a
达到 3,然后停止。
为什么?
如果将其更改为 OR
运算符,则直到两个变量都达到 3 时才会停止。
又是为什么?
实际上这个行为在数学上是正确的。不幸的是,英语有时会使 and
和 or
模棱两可。
考虑条件:
a < 3 && b < 3
您对英语的直觉使您认为:
Now, you would expect that a while loop will do its job until both variables reach 3
但这是错误的。只要两个变量都小于 3,条件就会起作用。这显然意味着,如果任何变量达到 3,则条件为假。即使在英语语法中也是如此,但由于 AND 和 OR 与列表交互的常见用法(逻辑上不正确)的使用方式而变得混乱。
首先让我们考虑一下正确的用法:
a < 3 && b < 3
- 这意味着
- 两个条件都必须为真(AND的定义)
a
不得达到3b
一定不能达到3
因此table的真相是:
a b result
-----------------------------
< 3 < 3 true
3++ < 3 false // AND requires both to be true
< 3 3++ false // however OR only requires one to be true
3++ 3++ false
一旦你写下 AND 的真相 table 你就会明白为什么如果任何变量达到 3 它必须停止循环。
现在让我们看看英语是如何混淆事物的。我想指出,严格来说,英语语法与 AND 和 OR 的数学定义一致,但从技术上讲,即使每个人都凭直觉理解其含义,但常见用法在技术上是错误的(每个人都以某种方式神奇地忽略了逻辑)。
在英语中,如果我们有一个列表,我们想要列表中的所有内容(比如购物清单),我们使用 and
加入列表:
I want an orange, an apple AND a banana
上面这句话要求一个人把三个水果都买下来
另一方面,如果我们有一个选项列表,我们会用 or
:
You can either walk OR drive there
严格来说,实际规则是,如果您希望列表的所有部分都存在 true/to,那么您可以使用 AND 连接它,如果您只需要列表的至少一部分是 true/exist 你用 OR 加入它。但这不是说英语的人解释 AND 和 OR 的方式。我们非正式地使用以前的定义想要一切或想要一些东西。
当涉及到否定时,这个细微的差别就变成了一个主要问题(小于也会触发它)。非正式地,我们理解以下内容:
I don't want apples, I don't want oranges AND I don't want bananas
as - 如果有一个苹果、一个橙子和一个香蕉,那么上面的人就不会高兴了。但正确的解释是,即使我们没有给他橙子和香蕉,如果给他一个苹果,这个人也不会高兴。这是因为他想要none个,他没有说他只是不想三个水果一起吃,但不介意一个香蕉。
现在让我们考虑以下问题:
I don't want an apple and an orange.
第一眼看上去和上面的句子一样,只是更短。但是逻辑上还是有区别的。在这种情况下,此人表示他不想要带橙子的苹果,但可以接受不带橙子的苹果。
AND 和 OR 在列表中的行为方式听起来相似但含义截然不同,因此有一个名字。它其实在布尔代数中有一个定理:叫做DeMorgan's Theorem。这其实很明显,但乍一看似乎并不那么明显。
它指出:
( NOT A ) AND ( NOT B ) is the same as NOT ( A OR B )
和
( NOT A ) OR ( NOT B ) is the same as NOT ( A AND B )
这就是为什么有时当 AND 不能像您认为的那样工作时,将它更改为 OR 突然工作。