Python3中的逻辑运算,跟其它语言的逻辑运算存在差别。
当运算数据皆为布尔类型时,逻辑运算思路相同。例如
if __name__ == '__main__':
print("true and true =", True and True)
print("true and false =", True and False)
print("false and true =", False and True)
print("false and false =", False and False)
print("true or true =", True or True)
print("true or false =", True or False)
print("false or true =", False or True)
print("false or false =", False or False)
输出为
true and true = True
true and false = False
false and true = False
false and false = False
true or true = True
true or false = True
false or true = True
false or false = False
但当运算数据中存在非布尔类型时,思路就不同了。例如
if __name__ == '__main__':
print("5 and true =", 5 and True)
print("true and 5 =", True and 5)
print("false and 5 =", False and 5)
print("5 and false =", 5 and False)
print("5 or true =", 5 or True)
print("true or 5 =", True or 5)
print("false or 5 =", False or 5)
print("5 or false =", 5 or False)
输出结果为
5 and true = True
true and 5 = 5
false and 5 = False
5 and false = False
5 or true = 5
true or 5 = True
false or 5 = 5
5 or false = 5
现对思路总结如下:
(1)对于AND,若运算数据中存在False,则为False;否则,返回最右端数据。
(2)对于OR,若运算数据中存在False,则返回剩余数据;否则,返回最左端数据。
那问题来了,如果运算数据都不为布尔类型呢?
if __name__ == '__main__':
print("5 or 6 =", 5 or 6)
print("5 and 6 =", 5 and 6)
上面的思路,同样适用,结果如下:
5 or 6 = 5
5 and 6 = 6
再来看更复杂的情况。
if __name__ == '__main__':
print("5 or 6 and 7=", 5 or 6 and 7)
print("5 and 6 or 7=", 5 and 6 or 7)
print("5 or 6 or 7=", 5 or 6 or 7)
print("5 and 6 and 7=", 5 and 6 and 7)
这里需要强调的是,在Python中,AND的优先级高于OR,因此,我们再按照之前的总结(需要进行简单的嵌套),可以推算出结果,
5 or 6 and 7= 5
5 and 6 or 7= 6
5 or 6 or 7= 5
5 and 6 and 7= 7
其它复杂情况,可依此类推。