为什么(a 和 b)不等同于不是 a 和 b?[已结束]

Why isn't not (a and b) the same as not a and not b? [closed]

提问人:Corbett Knoff 提问时间:12/22/2020 最后编辑:ShadowRangerCorbett Knoff 更新时间:12/22/2020 访问量:1732

问:


这个问题是由一个错别字或一个无法再重现的问题引起的。虽然类似的问题可能在这里成为主题,但这个问题的解决方式不太可能帮助未来的读者。

2年前关闭。

为什么不一样?Not(a and b)Not a and Not b


while i < len(array) - 1:
    if not array[i - 1] < array[i] and not array[i] > array[i + 1]:
        i += 1
        continue

while i < len(array) - 1:
isPeak = array[i - 1] < array[i] and array[i] > array[i + 1]
        if not isPeak:
            i += 1
            continue


我包含了提出这个问题的代码,但为什么与?Not(a and b)Not a and Not b

python 算法 boolean-logic

评论

9赞 mkrieger1 12/22/2020
因为从逻辑上讲与 .not (a and b)not a and not b
0赞 Prune 12/22/2020
请重复介绍导览中的提问方法,并提供预期的最小、可重复的示例。显示中间结果与预期结果的不同之处。进行初步的内部调查是的任务。这是学习调试的开始。请参阅这个可爱的调试站点以获取帮助。
9赞 Barmar 12/22/2020
谷歌德摩根定律。
2赞 mkrieger1 12/22/2020
您更新问题的答案是“因为这就是布尔逻辑的工作方式”。如前所述,请参阅示例 en.wikipedia.org/wiki/De_Morgan%27s_laws
1赞 mkrieger1 12/22/2020
not (a and b) == not a or not b和。not a and not b == not (a or b)

答:

2赞 ShadowRanger 12/22/2020 #1

因为它们在逻辑上不等价。你可以用一个真值表自己计算出来:

一个 B 不是 A 不是 B 不是 A 也不是 B
F F T T T
F T T F F
T F F T F
T T F F F
一个 B A 和 B 不是(A 和 B)
F F F T
F T F T
T F F T
T T T F

如果你看一下德摩根定律,就会发现一个简单的转换;当你把 分布到括号里时,你从 翻转到 (反之亦然),所以等价于 ;如果你为此制作一个真值表,你会发现它们完全匹配。同样,拉出 from 产生 ,然后再次匹配真值表。notandornot (A and B)not A or not Bnotnot A and not Bnot (A or B)

评论

1赞 ShadowRanger 12/23/2020
@VLAZ:感谢您改进的格式,没有意识到他们已经将表格引入了 Markdown