为什么 not (a and b) 不等于 not a and not b?

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

为什么 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 不同?

因为它们在逻辑上不等价。你可以自己用一个真理来解决table:

A B not A not B not A and not B
F F T T T
F T T F F
T F F T F
T T F F F
A B A and B not (A and B)
F F F T
F T F T
T F F T
T T T F

如果您查看 De Morgan's laws,可以使用简单的转换;当您将 not 分配到括号中时,您从 and 翻转到 or(反之亦然),因此 not (A and B) 等同于 not A or not B;如果你对此做出判断 table,你会发现它们完全匹配。类似地,从 not A and not B 中取出 not 会产生 not (A or B),然后,事实 table 再次匹配。