比较三个数组

时间:2016-12-11 21:45:45

标签: python arrays if-statement boolean conditional-statements

我想问一下,为什么这会返回'True'(或者代码执行时代码是什么):

def isItATriple(first,second,third):
if first[0] == second[0] == third[0] or first[0] != second[0] != third[0]:
    if first[1] == second[1] == third[1] or first[1] !=second[1] != third[1]:
        if first[2] == second[2] == third[2] or first[2] != second[2] != third[2]:
            if (first[3] == second[3] == third[3]) or (first[3] != second[3] != third[3]):
                return True
            else:
                return False
        else:
            return False
    else:
        return False
else:
    return False

print(isItATriple([0,0,0,0],[0,0,0,1],[0,0,0,0]))

1 个答案:

答案 0 :(得分:1)

让我们分析:

首先是:

if first[0] == second[0] == third[0] or \
        first[0] != second[0] != third[0]:

第一个(之前或)是True - 因为在0索引处所有列表都有0; 如果是这样 - 之后或未检查的条件(因为python是懒惰的)True or Anything给出True。

第二个if:

if first[1] == second[1] == third[1] or \
            first[1] !=second[1] != third[1]:

与上面完全相同 - 每个列表中的1个元素是相等的 - 所以它在这里是真的。

第三个if:

if first[2] == second[2] == third[2] \
                or first[2] != second[2] != third[2]:

同样的。一般来说:真的。

第四个if:

if first[3] == second[3] == third[3] or \
                    first[3] != second[3] != third[3]:

这里 - 第一个条件(之前或之前)为False,第二个条件为True。所以这就是你的方法返回True的原因。

第二个条件评估为:

0 != 1 != 0

换句话说,这意味着:

0 != 1 and 1 != 0

最后:

True  # because 0 is different than 1;

使用这样的运算符是常见的情况:

1 < x < 10

这意味着:

1 < x and x < 10

但说实话 - 这段代码非常难看:)

让我告诉你如何更多地nicely

def myIsATriple(first, second, third):
    return first == second == third

列表比较在python中工作得很好:)所以你不需要手动完成,例如:

myIsATriple([0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 0, 0])  # False
myIsATriple([0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0])  # True
myIsATriple([0, 'a', 0, 0], [0, 'a', 0, 0], [0, 'b', 0, 0])  # False
myIsATriple([0, 'a', 1, 0], [0, 'a', 1, 0], [0, 'a', 1, 0])  # True
myIsATriple([0, {'a': 2}, 1, 0], [0, {'a': 2}, 1, 0], [0, {'a': 3}, 1, 0])  # False
myIsATriple([0, {'a': 2}, 1, 0], [0, {'a': 2}, 1, 0], [0, {'a': 2}, 1, 0])  # True

快乐的编码!