《Python 3.x入门到应用实践》 — 3.4 逻辑运算符

举报
华章计算机 发表于 2020/02/08 23:23:40 2020/02/08
【摘要】 本节书摘来自华章计算机《Python 3.x入门到应用实践》 一书中第3章,第3.4节,作者是赵 军 等。

 3.4  逻辑运算符

逻辑运算符(Logical Operator)用来判断基本的逻辑运算,可控制程序运行的流程。逻辑运算符经常与关系运算符配合使用,运算的结果仅有“真”(True)与“假”(False)两种值。逻辑运算符包含and、or、not等。各个运算符的功能可参考表3-4。

表3-4

image.png

程序设计的初学者使用真值表(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

image.png

2. 逻辑or(或)

逻辑or只要左右两边的操作数中的任何一个成立,运算结果就为真,例如下面的逻辑运算为真:

a = 10

b = 20

a < b or a == b  #True

左边的式子a<b成立,运算结果就为真,不需要再判断右边的关系比较表达式。逻辑or真值表可参考表3-6。

表3-6

image.png

3. 逻辑not(非)

逻辑not是逻辑否定,用法稍微不一样,只有1个操作数就可以运算,它加在操作数左边,当操作数为真时,not运算结果为假;当操作数为假时,not运算结果为真。例如下面的逻辑运算结果为真:

a = 10

b = 20

not a<5  #True

原本a<5不成立(结果为假),前面加一个not就否定了,所以运算结果为真。逻辑not真值表可参考表3-7。

表3-7

image.png

接着我们以简单的两条语句来说明逻辑运算符的用法:

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所示。

 image.png

图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。

 image.png

图3-5


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。