高中数学中我们就学过逻辑运算,例如 p 为真命题,q 为假命题,那么“p且q”为假,“p或q”为真,“非q”为真。Python 也有类似的逻辑运算,请看下表:

表 1 Python 逻辑运算符及功能

逻辑运算符

含义

基本格式

说明

and

逻辑与运算,等价于数学中的“且”

a and b

当 a 和 b 两个表达式都为真时,a and b 的结果才为真,否则为假。

or

逻辑或运算,等价于数学中的“或”

a or b

当 a 和 b 两个表达式都为假时,a or b 的结果才是假,否则为真。

not

逻辑非运算,等价于数学中的“非”

not a

如果 a 为真,那么 not a 的结果为假;如果 a 为假,那么 not a 的结果为真。相当于对 a 取反。

逻辑运算符一般和关系运算符结合使用,例如:

14>6 and 45.6 > 90

14>6 结果为 True,成立,45.6>90 结果为 False,不成立,所以整个表达式的结果为 False,也即不成立。

再看一个比较实用的例子:

age = int(input("请输入年龄:"))

height = int(input("请输入身高:"))

if age>=18 and age<=30 and height >=170 and height <= 185 :

print("恭喜,你符合报考飞行员的条件")

else:

print("抱歉,你不符合报考飞行员的条件")

可能的运行结果:

请输入年龄:23↙

请输入身高:178↙

恭喜,你符合报考飞行员的条件

打脸某些 Python 教程

有些不负责任的 Python 教程说:Python 逻辑运算符用于操作 bool 类型的表达式,执行结果也是 bool 类型,这两点其实都是错误的!

Python 逻辑运算符可以用来操作任何类型的表达式,不管表达式是不是 bool 类型;同时,逻辑运算的结果也不一定是 bool 类型,它也可以是任意类型。请看下面的例子:

print(100 and 200)

print(45 and 0)

print("" or "http://c.biancheng.net/python/")

print(18.5 or "http://c.biancheng.net/python/")

运行结果:

200

0

http://c.biancheng.net/python/

18.5

你看,本例中 and 和 or 运算符操作的都不是 bool 类型表达式,操作的结果也不是 bool 值。

逻辑运算符的本质

在 Python 中,and 和 or 不一定会计算右边表达式的值,有时候只计算左边表达式的值就能得到最终结果。

另外,and 和 or 运算符会将其中一个表达式的值作为最终结果,而不是将 True 或者 False 作为最终结果。

以上两点极其重要,了解这两点不会让你在使用逻辑运算的过程中产生疑惑。

对于 and 运算符,两边的值都为真时最终结果才为真,但是只要其中有一个值为假,那么最终结果就是假,所以 Python 按照下面的规则执行 and 运算:

如果左边表达式的值为假,那么就不用计算右边表达式的值了,因为不管右边表达式的值是什么,都不会影响最终结果,最终结果都是假,此时 and 会把左边表达式的值作为最终结果。

如果左边表达式的值为真,那么最终值是不能确定的,and 会继续计算右边表达式的值,并将右边表达式的值作为最终结果。

对于 or 运算符,情况是类似的,两边的值都为假时最终结果才为假,只要其中有一个值为真,那么最终结果就是真,所以 Python 按照下面的规则执行 or 运算:

如果左边表达式的值为真,那么就不用计算右边表达式的值了,因为不管右边表达式的值是什么,都不会影响最终结果,最终结果都是真,此时 or 会把左边表达式的值作为最终结果。

如果左边表达式的值为假,那么最终值是不能确定的,or 会继续计算右边表达式的值,并将右边表达式的值作为最终结果。

使用代码验证上面的结论:

url = "http://c.biancheng.net/cplus/"

print("----False and xxx-----")

print( False and print(url) )

print("----True and xxx-----")

print( True and print(url) )

print("----False or xxx-----")

print( False or print(url) )

print("----True or xxx-----")

print( True or print(url) )

运行结果:

----False and xxx-----

False

----True and xxx-----

http://c.biancheng.net/cplus/

None

----False or xxx-----

http://c.biancheng.net/cplus/

None

----True or xxx-----

True

第 4 行代码中,and 左边的值为假,不需要再执行右边的表达式了,所以 print(url) 没有任何输出。

第 6 行代码中,and 左边的值为真,还需要执行右边的表达式才能得到最终的结果,所以 print(url) 输出了一个网址。

第 8、10 行代码也是类似的。

python与或非运算规则_Python逻辑运算符及其用法相关推荐

  1. python逻辑判断函数_Python逻辑运算符及其用法

    逻辑运算符用于操作 bool 类型的变量.常量或表达式,逻辑运算的返回值也是 bool 值. Python 的逻辑运算符有如下三个: and:与,前后两个操作数必须都是 True 才返回 True:否 ...

  2. python贪婪与非贪婪_python 贪婪 非贪婪 匹配

    python re模块还是需要重新学习. python readline 和 readlines(), readline() , read() 3者之间的区分,之前1直都不清楚,现在弄清楚是怎样回事了 ...

  3. python冒泡排序算法非递归_python 冒泡排序,递归

    今天LeetCode的时候暴力求解233 问题: 给定一个整数 n,计算所有小于等于 n 的非负数中数字1出现的个数. 例如: 给定 n = 13, 返回 6,因为数字1出现在下数中出现:1,10,1 ...

  4. python阻塞和非阻塞_Python基础必备知识:同步异步阻塞非阻塞

    一.状态介绍 在了解其他概念之前,我们首先要了解进程的几个状态.在程序运行的过程中,由于被操作系统的调度算法控制,程序会进入几个状态:就绪,运行和阻塞. 就绪(Ready)状态:当进程已分配到除CPU ...

  5. python 第一行非零_python – 沿着已排序的二维numpy数组的轴查找第一个非零值

    使用 np.where的速度相当快: >>> a array([[0, 0, 0, 1, 1, 1, 1], [0, 0, 0, 1, 1, 1, 1], [0, 0, 0, 0, ...

  6. python中argv的使用_python sys.argv[]用法

    sys.argv变量是一个字符串的列表.特别地,sys.argv包含了命令行参数 的列表,即使用命令行传递给你的程序的参数. 这里,当我们执行python using_sys.py we are ar ...

  7. python sleep函数什么意思_Python sleep()函数用法:线程睡眠

    位于 time 模块中的 sleep(secs) 函数,可以实现令当前执行的线程暂停 secs 秒后再继续执行.所谓暂停,即令当前线程进入阻塞状态,当达到 sleep() 函数规定的时间后,再由阻塞状 ...

  8. python requests 动态加载_python requests 高级用法

    HTTP动词 Requests 提供了几乎所有HTTP动词的功能:GET.OPTIONS.HEAD.POST.PUT.PATCH.DELETE.以下内容为使用 Requests 中的这些动词以及 Gi ...

  9. python win32模块详解_python模块:win32com用法详解

    使用技巧 import win32com from win32com.client import Dispatch, constants w = win32com.client.Dispatch('W ...

最新文章

  1. python使用符号 表示单行注释-Python注释(多行注释和单行注释)用法详解
  2. VS2013无法启动IIS Express Web的解决办法
  3. PAT1056 组合数的和 (15 分)
  4. 一个开源的强类型客户端(.NET 中的 Open Fegin)— Rabbit Go
  5. c语言学习自我评价,学习自我评价4篇
  6. mysql 查询简单记忆_mysql 函数大全-简单的总结,便于记忆
  7. iphone型号表_iPhone手机型号信息大全 (最新)
  8. ANSYS Products 2020中文版
  9. 计算机盘符为什么没有AB盘
  10. 如何将.frm,.MYD,.MYI文件导入数据库
  11. Windows7下OEM中证书错误,导航已阻止解决办法
  12. 计算机简史:你想不通去脉,是因为不了解来龙
  13. 博通 bcmdhd 网卡驱动分析
  14. 关于常用传感器NPN和PNP类型的选择
  15. 问题 - GitLab repositories 文件夹权限异常
  16. Qt 之 QLineEdit
  17. SpringCloud Alibaba实战--第八篇:Seata分布式事务处理
  18. 股票期权 【小白手册】(含大量图解)
  19. linux通过xdm开启端口,Red Hat Linux 5.4 开启xdm远程访问
  20. 谷歌学术we are sorry/拉黑/报错自动查询过多

热门文章

  1. jQuery源码-jQuery.fn.each jQuery.each
  2. STP HSRP和NAT结合实现网络出口的冗余和次优路径分析
  3. 为什么static成员必须在类外初始化
  4. 复合梯形公式与复合辛普森公式matlab_【IBE】关于电缆桥架的安装,一定要知道的两个公式!...
  5. default activity not found怎么解决_我怎么也没想到“羽绒服”的英文是down jacket,哪里down了?...
  6. 4*4按键扫描程序c语言,【资料】单片机4*4矩阵键盘扫描程序(c语言+汇编语言2个版本)...
  7. php 检测是否是微信浏览器,php判断是否是微信浏览器和是否是移动端代码
  8. sql 相加_SQL-多表查询
  9. python非线性回归分析_sklearn实现非线性回归模型
  10. 双声道录制的混动波形信号