Python“等于”和“不等于”

时间:2018-03-28 14:19:50

标签: python operators

我正在做一个练习题,无法弄清楚我做错了什么。似乎我对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的工作方式相同,因为必须满足这两个条件,但是想知道是否有更有知识的人可以解释?

2 个答案:

答案 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)。