Skip to content

Commit 411b668

Browse files
committed
edit about bool object
1 parent 40d7cdc commit 411b668

File tree

1 file changed

+42
-13
lines changed

1 file changed

+42
-13
lines changed

120.md

Lines changed: 42 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,9 @@
9292
9393
关于逻辑问题,看官如有兴趣,可以听一听[《国立台湾大学公开课:逻辑》](http://v.163.com/special/ntu/luoji.html)
9494

95-
###布尔类型的变量
95+
###布尔类型
9696

97-
在所有的高级语言中,都有这么一类变量,被称之为布尔型。从这个名称,看官就知道了,这是用一个人的名字来命名的。
97+
在所有的高级语言中,都有这么一类对象,被称之为布尔型。从这个名称,看官就知道了,这是用一个人的名字来命名的。
9898

9999
>乔治·布尔(George Boole,1815年11月-1864年,),英格兰数学家、哲学家。
100100
@@ -112,9 +112,9 @@
112112

113113
布尔所创立的这套逻辑被称之为“布尔代数”。其中规定只有两种值,True和False,正好对应这计算机上二进制数的1和0。所以,布尔代数和计算机是天然吻合的。
114114

115-
所谓布尔类型,就是返回结果为1(True)、0(False)的数据变量
115+
所谓布尔类型,就是返回结果为True)、False的数据
116116

117-
在python中(其它高级语言也类似,其实就是布尔代数的运算法则),有三种运算符,可以实现布尔类型的变量间的运算
117+
在Python中(其它高级语言也类似,其实就是布尔代数的运算法则),有三种运算符,可以实现布尔类型的对象间的运算
118118

119119
###布尔运算
120120

@@ -130,7 +130,7 @@
130130

131131
- and
132132

133-
and,翻译为“与”运算,但事实上,这种翻译容易引起望文生义的理解。先说一下正确的理解。A and B,含义是:首先运算A,如果A的值是true,就计算B,并将B的结果返回做为最终结果,如果B是False,那么A and B的最终结果就是False,如果B的结果是True,那么A and B的结果就是True;如果A的值是False ,就不计算B了,直接返回A and B的结果为False.
133+
and,翻译为“与”运算,但事实上,这种翻译容易引起望文生义的理解。先说一下正确的理解。A and B,含义是:首先运算A,如果A的值是True,就计算B,并将B的结果返回做为最终结果,如果B是False,那么A and B的最终结果就是False,如果B的结果是True,那么A and B的结果就是True;如果A的值是False ,就不计算B了,直接返回A and B的结果为False.
134134

135135
比如:
136136

@@ -149,25 +149,32 @@ and,翻译为“与”运算,但事实上,这种翻译容易引起望文
149149
>>> 4<3 and 4<2
150150
False
151151

152-
前面说容易引起望文生义的理解,就是有相当不少的人认为无论什么时候都看and两边的值,都是true返回true,有一个是false就返回false。根据这种理解得到的结果,与前述理解得到的结果一样,但是,运算量不一样哦。
152+
前面说容易引起望文生义的理解,就是有相当不少的人认为无论什么时候都看and两边的值,都是True返回True,有一个是False就返回False。根据这种理解得到的结果,与前述理解得到的结果一样,但是,运算量不一样哦。短路求值,能够减少计算量,提高计算布尔表达式的速度。
153+
154+
把上面的计算过程综合一下,在计算`A and B`中,其流程是:
155+
156+
if A == False:
157+
return False
158+
else:
159+
return bool(B)
160+
161+
上面这段算是伪代码啦。所谓伪代码,就是不是真正的代码,无法运行。但是,伪代码也有用途,就是能够以类似代码的方式表达一种计算过程。
153162

154163
- or
155164

156-
or,翻译为“或”运算。在A or B中,它是这么运算的:
165+
or,翻译为“或”运算。`A or B`,它是这么运算的:
157166

158167
if A==True:
159168
return True
160169
else:
161170
return bool(B)
162171

163-
上面这段算是伪代码啦。所谓伪代码,就是不是真正的代码,无法运行。但是,伪代码也有用途,就是能够以类似代码的方式表达一种计算过程。
164-
165172
看官是不是能够看懂上面的伪代码呢?下面再增加上每行的注释。这个伪代码跟自然的英语差不多呀。
166173

167-
if A==True: #如果A的值是True
168-
return True #返回True,表达式最终结果是True
169-
else: #否则,也就是A的值不是True
170-
return bool(B) #看B的值,然后就返回B的值做为最终结果。
174+
if A==True: #如果A的值是True
175+
return True #返回True,表达式最终结果是True
176+
else: #否则,也就是A的值不是True
177+
return bool(B) #看B的值,然后就返回B的值做为最终结果。
171178

172179
举例,根据上面的运算过程,分析一下下面的例子,是不是与运算结果一致?
173180

@@ -189,6 +196,28 @@ not,翻译成“非”,窃以为非常好,不论面对什么,就是要
189196

190197
关于运算符问题,其实不止上面这些,还有呢,比如成员运算符in,在后面的学习中会逐渐遇到。
191198

199+
##复杂的布尔表达式
200+
201+
在进行逻辑判断或者条件判断的时候,不一定都是类似上面例子那样简单的表达式,也可能遇到复杂的表达。如果你遇到了复杂表达式,最好的方法是使用括号。
202+
203+
>>> (4<9) and (5>9)
204+
False
205+
>>> not(True and True)
206+
False
207+
208+
用括号的方法,意义非常明确。当然,布尔运算也有优先级,但是,你不一定记住,或者如果使用括号,根本没有必要记住优先级。
209+
210+
不过为了给学习者一个印象,先面还是以表格行事,按照从高到底的顺序,把布尔运算的优先级列出来,仅供参考,并且没有必要记忆。
211+
212+
|顺序|符号|
213+
|----|----|
214+
|1 | x == y |
215+
|2 | x != y |
216+
|3 | not x |
217+
|4 | x and y |
218+
|5 | x or y |
219+
220+
千万不要记住,一定要用括号。
192221
------
193222

194223
[总目录](./index.md)&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;[上节:集合(2)](./119.md)&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;[下节:语句(1)](./121.md)

0 commit comments

Comments
 (0)