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其它复杂情况,可依此类推。