第10课:布尔类型,对错分明的世界
![de3a3582c61f339e113b07fbdb8ddef1.gif](https://i-blog.csdnimg.cn/blog_migrate/5a226c7f5aba7474429005bf419b6039.gif)
我们从小接受的教育,喜欢分别对错,喜欢英雄干翻反派。
但是,成年后,渐渐模糊了对与错的界线,在生存与对错,利益与对错之间,都不一定站在对的那一边。或许,这种妥协就是成熟的标志,也是成年的无奈。
——没有对错。
而Python的世界,是纯真的,可以尽情的去感受世界的对于错,非白即黑。
好了,我们开始今天的课程:布尔类型。
01
布尔类型
布尔类型只有两个值:False或者True,也就是假或者真。
如果一个数值,1314给Python,它又不懂其中的浪漫,你说它是真还是假?
或者,直接给Python一个字符串“假”,是真还是假?
使用bool()内置函数可以直接给出True或者False的结果。
![90ef54649e8436a42438b96a773b9aac.png](https://i-blog.csdnimg.cn/blog_migrate/cbcb8e5a5a5c9ac8981b88081dafe729.png)
面对这个结果就有点搞笑了,你说Python不认识中文就算了,居然还不认识英文,这不是是非不分,对错颠倒嘛。
这个嘛,我们再去掉双引号试试。
![4ef120d64bdc00dc517e29c70e5f3f8e.png](https://i-blog.csdnimg.cn/blog_migrate/ff5632cc9ec43ef290f4700f334b10f6.png)
面对这个结果就有点搞笑了,你说Python不认识中文就算了,居然还不认识英文,这不是是非不分,对错颠倒嘛。
这个嘛,我们再去掉双引号试试。
![1e1391ca93f7dd389492f4c1d27bea4c.png](https://i-blog.csdnimg.cn/blog_migrate/c8b39ae06c9bc99ebb83a752430b779c.png)
无论数值是多少,只有等值于0的结果才是False,其他情况也都是True。
结果是True的结果非常多,但是False的结果却屈指可数。
![6bd1ceceb61cad59aec7df80b1f4e191.png](https://i-blog.csdnimg.cn/blog_migrate/b9590923e747a786b11e85f780317656.png)
以下这些就是结果为False的所有情况:
定义为False的对象:None和False,None表示一无所有,False则表示假。
值为0的数字类型:0,0.0,0j,Decimal(0),Fraction(0,1)
值为0的数字类型也是False,无论是整形、浮点数或者复数,结局都是一样的,还包含了前面我们介绍过的Decimal模块里的Decimal(0),以及Fraction(0,1),表示的是分子为0,分母为1的有理数,以上这些都是值为0,那么毫无疑问也就是False。
空的序列和合集:",(),[],{},set().range(0),这个也很好理解,一个空的容器,里面什么东西都没有,那么它的结果就是False。
以上这些里面有一些符号和关键词大家看着都是以前没有见过的陌生面孔,我们先看个眼熟,建立一个基础的概念,后面会逐步的一一熟悉。
这一系列操作下来,真真假假,假假真真,感觉比现实世界还要复杂。而且这些真假有什么用呢?
之前我们做的小游戏里介绍过,几乎在任何一门编程语言中,最重要的就是分支语句和循环语句,要实现分支语句和循环语句,都要有一个触发行为的条件,这个条件就是真真假假假假真真的布尔类型的结果。
条件是比较运算符计算之后的结果:
![5c3ab35d53e63f116d23cf21cf1ca064.png](https://i-blog.csdnimg.cn/blog_migrate/8eee2fc1eb1c5aa9766af54ea5c6b6ae.png)
事实证明,1314比520要大。
这里可以直接:
if bool(520): print("520 is True")else: print("520 is Flase")
![7d90f0f5deceda31038be69ababbb4cd.png](https://i-blog.csdnimg.cn/blog_migrate/b72a5fc4451e5e8dfe7795c36b9a9720.png)
因为520是True,print输出,if后面的条件是True,那它当然就是打印Ture。
关于布尔类型,还有一个小秘密要分享:
1 == True0 == FalseTrue + FalseTrue - FalseTrue * False
![9e026b01d46f0b1d4bec3246b9f280bc.png](https://i-blog.csdnimg.cn/blog_migrate/d4aba1208578b5a4e2b68b6b4bcfa698.png)
1跟True是相等,但是得到0也是相等,True+False呢?它的值等于1,True-False,值等于1,True*False,值等于0,而True除以False,报错,这是为什么?
答案其实很简单,小学数学老师都教过,那就是被除数不能为0。
布尔类型其实就是特殊的整数类型。
02
逻辑运算符
Python总共有三个逻辑运算符,分别是and,or和not。
![ddf64cda11f9404aee31076ef083f761.png](https://i-blog.csdnimg.cn/blog_migrate/8dc88cdc4c463edd3d4f6b632af24799.png)
逻辑运算也叫布尔运算,它的运算对象是布尔类型的对象,有了逻辑运算,我们就可以将多个比较结果合并在一起进行判断啦。
and运算符要求只有左右两个操作数同时为True,那么结果才是为True;只要任何一方是False,结果都为False。
直接举栗:
3 < 4 and 4 < 5
![4415cbe09d2daad401b874e31f520459.png](https://i-blog.csdnimg.cn/blog_migrate/b4057940ac559dad870ab936bf91aa20.png)
两边的布尔值都为True,所以结果也是True。
3 > 4 and 4 < 5
![28b9a43aad30aca8f6a7ad918cb7f5da.png](https://i-blog.csdnimg.cn/blog_migrate/6db827ab343c9d7a47dc16d588734428.png)
两边各有一个False,所以得到的值也是False。
相反,or的运算符,只需要其中一方为True,那么结果就为True,当左右两个操作数同时为False,结果才会为False。
3 < 4 or 4 < 5
两边都是True,得到True。
3 > 4 or 4 < 53 < 4 or 4 > 5
3>4虽然为False,但是4<5是True,所以结果就是Ture,
只有一种情况它会False,就是or的左右两边同时都是假的,结果才是False.
![4130c7b1dd80ba8b4b023ba6a092bbff.png](https://i-blog.csdnimg.cn/blog_migrate/83ac3b0a62f3b3aa709e64167dec601e.png)
最后一个运算符,not运算符。
not运算符只有一个操作数,它的作用呢,是得到一个和操作数相反的布尔类型值
not True,为False
not False, 为True
not 250,没有人承认自己是250,所以结果为False
not 0,为True
![0e0cbde701ece411fc5a940c82f49273.png](https://i-blog.csdnimg.cn/blog_migrate/1bbefb2bef157294e254554f6882fa45.png)
对于and和or运算符,它的计算结果不一定是True或者False,这要看它的操作数是什么了。
比如上面的栗子,左边3小于4得到一个True,右边4大于5得到一个False。那么,3小于4,and 4大于5 就相当于True and False,那结果就是False。
3小于4 and 4大于5,就相当于True and False,那么结果就是False。但是呢,python的所有对象都支持真值测试,所以操作数事实上是支持任何对象的。
python中任何对象都能直接进行真值测试(测试该对象的布尔类型值为True或者False),用于if或者while语句的条件判断,也可以作为布尔逻辑运算符的操作数。
如果,给到的操作数是两个数值,那么它的运算结果也是数值。
3 and 4,得到的是4
4 or 5,得到的还是4
![98d0bd3028d9873b61d51a6e2cb5e9b7.png](https://i-blog.csdnimg.cn/blog_migrate/f3ff9075f776eb58a4f027eadfd7396c.png)
如果给到的操作数是两个字符串,那么它的结果也是字符串:
"520" and "1314"
得到1314
![b66cad566cfa7fca3d5cabf5e1b942b7.png](https://i-blog.csdnimg.cn/blog_migrate/131cae63c61e3cf5ce1d817912f04267.png)
如果是一个字符串,一个是数字呢?
"Hello" or 250
得到的是Hello
![351f09c6931543d7b24302e4ededa407.png](https://i-blog.csdnimg.cn/blog_migrate/bb89fa2f0d0ffd4d1c08749d306d02f9.png)
为什么会有这样的情况?
明天将会揭晓答案。
爱你们,明天见!
【END】
参考:
1、Crossin的编程教室
2、Python简明手册
3、零基础入门学习Python(第2版)
4、知乎
5、百度
关注我们,一起学Python
![125e793a57820037d6583f58a23b39ba.png](https://i-blog.csdnimg.cn/blog_migrate/9a23b501934c37c4c6ce8101ab258462.jpeg)