我想问一下,为什么这会返回'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]))
答案 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
快乐的编码!