我正在做一个练习题,无法弄清楚我做错了什么。似乎我对or
应该如何运作感到有点困惑。
我将传递13到19之间的一系列数字:
for i in range(13,20):
func(i)
功能1
def func(n):
if n == 15 or n == 16:
pass
else:
n = 0
结果1
0
0
15
16
0
0
0
因此,如果n等于15或n
等于16,则传递。还有别的,让它成为0.有道理。
功能2
def func(n):
if n != 15 and n != 16:
n = 0
else:
pass
结果2
0
0
15
16
0
0
0
如果n
不等于15或16,则将其设为0.否则,通过。再次,有道理。
这是我有点失意的地方:
功能3
def func(n):
if n == 15 and n == 16:
pass
else:
n = 0
结果3
0
0
0
0
0
0
0
我认为结果是由于需要满足n
的两个条件;如果等于15 和 16,则传递,否则使其为零。我知道了。
功能4
def func(n):
if n != 15 or n != 16:
n = 0
else:
pass
结果4
0
0
0
0
0
0
0
如果n
不等于15或n
不等于16,则它应该为零。
我认为这意味着or
以某种方式与and
的工作方式相同,因为必须满足这两个条件,但是想知道是否有更有知识的人可以解释?
答案 0 :(得分:3)
if n != 15 or n != 16:
每个数字(包括15和16)都通过了此测试,因此结果将始终为True
。请注意,只有一个条件需要True
才能使or
语句评估为True
。每个数字不等于15 或不等于16。
我认为这意味着或以某种方式以同样的方式运作,因为必须满足这两个条件,但是想知道是否有更有知识的人可以解释?
通常情况并非如此。您已经编写了一个特殊情况,其中或与不的行为类似于和。 (请参阅Maged关于 DeMorgan法律的答案)
答案 1 :(得分:2)
这基本上是 De-Morgan 法律。
〜(a 和 b)=(~a 或 ~b)。