python-逻辑运算:notandor和布尔值:TrueFalse

Python018

python-逻辑运算:notandor和布尔值:TrueFalse,第1张

这东西在每一个语言都有,and or not 对应与、或、非三种逻辑运算;True和False是bool值,即真和假。 逻辑运算和布尔值经常用于if判断语句、循环语句的条件语句。 首先作为控制条件应该是一个布尔值,即真和假——True和false。 python的内置类——布尔类,只有两个实例:True和false。对于一般数字而言,0是False,非0是True;对于序列和容器类型,如列表、字典、字符串等,空为False,非空为True。 所以就有了这样的用法: 输出:1 为True 输出: 0 为 False 输出:a = '字符串' 这了可以看出一个实例本身可以作为控制条件,这是因为,解释器会先把这个实例转换为bool类型,然后根据这个bool类型执行程序。即bool(a) = True、bool(b) = False。 但是只用这样的方式控制程序显然不够,比如我希望a为空,b为非空的时候,我输出“我天下第一”,这怎么办? 如果不用not and or 就会写成这样: 输出:我天下第一 可以把a 看成False,b看成True。 从这里我们可以看到,我们用了两层if--else语句来判断a为空,b为非空的情况,那么我用逻辑运算呢? 输出:我天下第一 一样的:可以把a 看成False,b看成True。那么not a and b的意思就是:not False and True 这时候就是逻辑运算符的优先级的问题,这可以借鉴C语言的那本书《C程序设计》第五版的第92页 !非 算数运算符 关系运算符 &&和 || 赋值运算符 运算优先级从上到下,越来越低。 这是C语言里的,在python里就是: not -------------->高 and 和 or ---------->低 所以我们先算not 于是 not False and True 就成所以了True and True这就很清楚了结果为True,所以“我天下第一”。 所以我们就可以总结出: 1.先将实例变为布尔值 2.在计算所有的not 3.根据语言特性,从左到右或者从右到左计算逻辑运算结果。 当然在python中是从左到右。 and 和 or 运算具有短路保护!什么意思呢?看一个栗子 1 or a or的左边是1也就是True,根据or的运算法则,只要有一个真则为真,所以不管a是真还是假,结果都是真。 0 and a and 左边为0,为False,同样,and只要有一个为假则为假,所以不管a是真还是假,结果都是假。 所以and 和 or 的结果可以根据第一个操作数的值来确定,那么他就不会对第二个操作数进行运算。 这个功能用起来要很小心,不然很可能会出现想不到的结果。 这里会输出什么呢? 输出:我天下第一 因为x是True,无论y and z 的结果是什么,这个语句的结果都是True,这就是短路保护,当然也有的人说惰性计算。 我觉得迭代器、生成器那个才叫惰性计算。

乔治·布尔(George Boole,1815.11.2~1864),1815年11月2日生于英格兰的林肯。19世纪最重要的数学家之一,出版了《逻辑的数学分析》 ,这是它对符号逻辑诸多贡献中的第一次。

布尔的逻辑代数理论建立在两种逻辑值“真True”、“假False”和三种逻辑关系“与AND”、“或OR”、“非NOT”。这种理论为数字电子计算机的二进制、形关逻辑元件和逻辑电路的设计辅平了道路。

冯·诺依曼奠定了现代计算机的基础,被世人尊为“计算机之父”,但在谈到他的理论与构思时,他谦虚地说,这些理论与构思的基础来自于英国数学家图灵和布尔的思想。

谷歌在2015年的网页纪念了布尔诞辰200周年。

布尔值

计算机的逻辑判断,只有两种结果,就是True(英文意思是“真”)和False(英文意思是“假”)

在Python中:

只要数字零、空对象以及特殊对象None都被认作是假,其他为真

用 bool() 函数来查看一个数据会被判断为真还是假

Python中有三种布尔表达式运算符:

x and y (两者都)

x or y (两者的其中之一)

not x (不)

not True就等于False,not False就等于True

实例:

True

False

True

False

布尔值操作符优先级为 not >and>or

x是True,无论y and z 的结果是什么,这个语句的结果都是True,这就是短路保护,也叫说惰性计算,懒得计算后面的。

其实记得布尔值操作符优先级为 not >and>or即可。