2.7 逻辑运算
计算机编程世界从某种程度上说,就是数学和逻辑的世界,这部分内容是计算机专业中一门叫作《离散数学》的课程的基础内容。本节只简单介绍逻辑运算,但内容非常重要,请大家一定要完全理解和掌握。
现在绝大多数计算机的逻辑世界都是二值逻辑,即只有两个逻辑值,也叫布尔值,一个是“真”,另一个是“假”,在Python 中,前者用True 表示,后者用False表示。再次提醒大家,这两个单词的首字母要大写。这里的“真”表示某个条件成立,“假”表示某个条件不成立,并不是日常所说的“真善美”和“假丑恶”,它们没有褒义和贬义的意思。
要了解逻辑,先需要了解什么是命题。命题就是表达判断的陈述句,它具有一个确定的真值。
当命题成立时,其真值为真;当命题不成立时,其真值为假。因此,命题的真值不一定就为真,也可能为假,请注意这点。
看看下面的句子。
(1)一般情况下,水加热到100℃,就会沸腾。
(2)中国的首都是北京。
(3)宇宙中会存在外星人。
(4)汽车开得越快,行驶同样的距离,需要的时间会越长。
(5)那个女孩长得真漂亮!
(6)快点走,不然我们要迟到了!
其中的(1)~(4)都是表达判断的陈述句,因而它们都是命题,第(1)(2)句成立,它们的真值都为真,对于第(3)句,目前人类的科技不好判断其真假,有人相信有外星人,有人不相信有外星人,但从本质上说,它一定有真假,因此我们承认它是一个命题。第(4)句是命题,但它的真值显然为假。第(5)句是感叹句,第(6)句是祈使句,它们都不是陈述句,因而不是命题,就不存在真值。
Python 编程中主要会用到三种逻辑运算,分别是:逻辑非、逻辑与、逻辑或。
1. 逻辑非
逻辑非也叫逻辑反,在Python 中使用单词not 来表示,看下面的命题。
· 原命题:北京是中国的首都。(该命题的真值为真)
· 否命题:北京不是中国的首都。(该命题的真值为假)
从数学上理解,编程中的求逻辑非就是对一个原命题求它的否命题。因此,原来真值为真的命题求非后真值为假,原来真值为假的命题求非后真值为真。
2. 逻辑与
逻辑与在Python 中使用单词and 来表示。
如果一个复杂的大的命题由两个或多个小命题组成,并且这些小命题同时成立,那么这个大的命题也成立。下面看这句话,假设你的父母对你说:“如果明天是周末,并且不下雨,我们全家就去长城玩。”这句话中包含有两个小命题:
第一:明天是周末。
第二:明天不下雨。
只有当这两个小命题(也就是这两个条件)同时成立,你们一家才会去长城玩,如果其中有一个不成立,就不能去玩,即:要么明天不是周末,要么明天下雨了,那么你们家就不会去长城玩了。
如果用Python 写出伪代码(伪代码不是真正的Python 代码,而是使用自然语言,比如汉语或英语写出的,表达逻辑意思的模拟代码),句子如下:
明天是周末 and 明天不下雨
其中的and 就是逻辑与的意思,可以理解为它对应于汉语中的“并且”“和”“与”等表示多个条件同时成立的意思。
3. 逻辑或
逻辑或在Python 中使用单词or 来表示。
如果一个复杂的大的命题由两个或多个小命题组成,并且这些小命题至少有一个成立,那么这个大的命题就成立。
看这个例子:你和小明是邻居,也是很好的朋友,在同一所学校同一个年级但不同的班级读书,你们约好了每天要一起回家,那么怎样才能保证每天都一起回家呢?你们约定:如果他们班放学早,他就在校门口等你;如果你们班放学早,你就在校门口等他;如果你们两个班同时放学,你们仍然在校门口汇合,然后一起回家。总之,不见不散。
(1)你会在校门口等小明。
(2)小明会在校门口等你。
伪代码:你会在校门口等小明 or 小明会在校门口等你
只要你们严格按这样的约定做了,那么无论是前一个命题成立,还是后一个命题成立,或者前后两个命题同时成立,都能保证你们每天一起回家。
三种逻辑运算的法则如表2-5 所示。
表2-5
从表2-5 可以看出以下三种情况:
· 当进行逻辑非运算时,结果就是原命题的否命题。
· 当进行逻辑与运算时,只有两个命题同时为真,整个表达式才为真。其中,如果任何一个为假,整个表达式就为假。
· 当进行逻辑或运算时,只有两个命题同时为假,整个表达式才为假,其中,如果任何一个为真,整个表达式就为真。
三种逻辑运算中,逻辑非的优先级别最高,逻辑与次之,逻辑或最低,如果需要改变逻辑运算的优先顺序,同样可以添加圆括号。
三种逻辑运算的结果都是布尔类型,只可能得到两个值,要么是True,要么是False。