《Python 3.x入门到应用实践》 — 3.4 逻辑运算符
3.4 逻辑运算符
逻辑运算符(Logical Operator)用来判断基本的逻辑运算,可控制程序运行的流程。逻辑运算符经常与关系运算符配合使用,运算的结果仅有“真”(True)与“假”(False)两种值。逻辑运算符包含and、or、not等。各个运算符的功能可参考表3-4。
表3-4
程序设计的初学者使用真值表(truth table)来观察逻辑运算会更清楚。真值表是把操作数真(T)和假(F)的全部组合以及逻辑运算的结果都列出来,只要了解and、or和not的工作原理,再加上真值表的辅助,就能很快熟悉逻辑运算,而不需要去死记硬背它。
1. 逻辑and(与)
逻辑and必须左右两个操作数都成立,运算结果才为真,任何一边为假(False)时,执行结果都为假。例如下面的指令的逻辑运算结果为真:
a = 10
b = 20
a < b and a != b #True
逻辑and真值表可参考表3-5。
表3-5
2. 逻辑or(或)
逻辑or只要左右两边的操作数中的任何一个成立,运算结果就为真,例如下面的逻辑运算为真:
a = 10
b = 20
a < b or a == b #True
左边的式子a<b成立,运算结果就为真,不需要再判断右边的关系比较表达式。逻辑or真值表可参考表3-6。
表3-6
3. 逻辑not(非)
逻辑not是逻辑否定,用法稍微不一样,只有1个操作数就可以运算,它加在操作数左边,当操作数为真时,not运算结果为假;当操作数为假时,not运算结果为真。例如下面的逻辑运算结果为真:
a = 10
b = 20
not a<5 #True
原本a<5不成立(结果为假),前面加一个not就否定了,所以运算结果为真。逻辑not真值表可参考表3-7。
表3-7
接着我们以简单的两条语句来说明逻辑运算符的用法:
num = 24
result = (num % 6 == 0) and (num % 4 == 0)
使用and运算符时,由于24能同时被6和4整除,所以result返回True。
我们再来看另一个例子:
total = 31
value = total % 3 == 0 or total % 7 == 0
使用or运算符时,由于31无法被3和7整除,所以value返回False。
补充说明一点,在Python程序设计语言中,当使用and、or运算符进行逻辑运算时,会采用所谓的“短路运算”(Short-Circuit)。我们以and运算符为例来说明,短路运算的判断原则是,如果第一个操作数返回True,才会继续第二个运算的判断,也就是说,如果第一个操作数返回False,就不需要再往下判断了,这样可以加快程序的执行速度,例如:
print (15>8) and (58>35) #第一个运算结果返回True,会继续往下判断
另外,如果短路运算应用于or运算符,当第一个操作数返回False时,才会接着进行第二个操作数的判断。但是,如果第一个操作数返回True,就不需要再往下判断了,同样可以加快程序的执行速度。
以下范例程序输入两次月考的成绩和期末考试成绩,月考只要其中一次及格(大于60分),期末考必须及格,这样学期成绩才算及格,及格就输出PASS,否则输出FAIL。
【范例程序:coursePassOrFail.py】 判断成绩及格/不及格
01 # -*- coding: utf-8 -*-
02 """
03 输入两次月考成绩及期末考试成绩
04 月考只要其中一次及格并且期末考试及格
05 学期的成绩才算及格,及格则输出PASS,否则输出FAIL
06 """
07 grade1 = int(input("请输入第一次月考成绩:"))
08 grade2 = int(input("请输入第二次月考成绩:"))
09 lastGrade = int(input("请输入期末考试成绩:"))
10
11 if (grade1>=60 or grade2>=60) and lastGrade>=60:
12- print("PASS")
13 else:
14 print("FAIL")
程序的执行结果如图3-4所示。
图3-4
程序代码解析:
题目要求的及格条件有以下两个。
(1)“月考只要其中一次及格”:用逻辑or来判断。
(2)“期末考必须及格”:用逻辑and来判断。
当表达式使用一个以上的逻辑运算符时,必须考虑逻辑运算符优先级的问题,逻辑not会第一个计算,接下来是逻辑and,最后才是逻辑or。
在范例程序中使用了两个逻辑运算符:and和or,如果直接写成下式,逻辑and会先执行,语意就变成第二次月考成绩与期末考试成绩必须大于60分,得到的执行结果就不正确了。
grade1>=60 or grade2>=60 and lastGrade>=60
所以必须先加上括号,强迫条件表达式先执行逻辑or判断。例如,在范例程序运行时,输入第1次月考成绩为90分,第2次月考成绩为59分,期末考成绩为80分,经过如图3-5所示的逻辑判断之后会得到True,所以结果就会显示PASS。
图3-5
- 点赞
- 收藏
- 关注作者
评论(0)