66顺序结构的程序设计是最简单的,只要按照解决问题的顺序写出相应的语句就行,它的执行顺序是自上而下,依次执行。
77通俗一点的说法,就是代码从上到下一行一行的执行。
88请看下面求圆面积代码,代码中,请注意,乘法的优先级高于乘法,所以乘法放前面后面都可以。
9- ![ ] ( ch5_1.png )
9+ ![ ] ( https://github.com/pythonpeixun/article/tree/master/python/ ch5_1.png)
1010
1111如果只有顺序结构,这样程序的灵活性不够,能解决的问题太少,计算机科学家设计编程语言的时候,设计了可以做选择的判断结构
1212和可以反复做一件事儿的循环结构。
@@ -27,51 +27,51 @@ None,False,0, 0.0,空字符串'', 空元组(), 空列表[], 空字典{}。
2727instances of user-defined classes, if the class defines a __ bool__ () or __ len__ () method, when that method returns the integer zero or bool value False.
2828除上面的以外,都为真。
2929是真还是假,用bool类检测一下,就知道!
30- ![ ] ( ch5_2.png )
30+ ![ ] ( https://github.com/pythonpeixun/article/tree/master/python/ ch5_2.png)
3131
3232## 逻辑运算符
3333
3434 Boolean Operations — and, or, not
35-
35+
3636 运算符(Operation) 计算结果(Result) 优先级
3737 x or y if x is false, then y, else x (1)
3838 x and y if x is false, then x, else y (2)
3939 not x if x is false, then True, else False (3)
40-
40+
4141 逻辑运算符优先级,not 最高,and 第二, or 第三。
4242 not 运算符优先级低于其它非逻辑运算符,not a == b 相当于 not (a == b),
4343 如果写成 a == not b 就会报语法错误。
4444 逻辑短路,计算2个值和一个逻辑运算符组成的表达式。
4545 x or y 只有当 bool(x) 为False时,才会计算后面的y,否则直接得出表达式的值。
4646 下面的代码发生短路情况,0为除数不合法,但发生短路,3/0没有被计算。
4747 >>> 1 or 3 / 0
48- 1
48+ 1
4949 x and y 只有当 bool(x) 为True时,才会计算后面的y。
5050 下面的代码发生短路情况
5151 >>> 0 and 3 / 0
52- 0
53-
54- 特别提示:初学者在布尔表达式中,有几个纠结。
55- 有的朋友说,下面这样的表达式为啥不发生短路。为啥结果不是0,而是[]
56- >>> 0 and 3 / 0 or None and 1 or []
57- []
58- 黄哥的解答是,逻辑短路,计算2个值和一个逻辑运算符组成的表达式,0 and 3 / 0 发生了短路,
59- 0 and 3 / 0计算结果为0,但整个表达式求值没有完,要继续计算 0 and 3 / 0 or None and 1 or [] 变为
60- 0 or None and 1 or [],前面说了and 优先级高于or,0 or None and 1 or []相当于
61- 0 or (None and 1) or [],进一步简化,0 or None or [],再看上面
62- x or y if x is false, then y, else x, 所以0 or None or [] 计算为None or []
63- 最后结果为[]
64-
65- 第二个纠结是:
66- >>> 3 and 4
67- 4
68-
69- 结果为4,有的朋友纠结说,为啥不是True。
70- 文档上说了x and y if x is false, then x, else y。
52+ 0
53+
54+ 特别提示:初学者在布尔表达式中,有几个纠结。
55+ 有的朋友说,下面这样的表达式为啥不发生短路。为啥结果不是0,而是[]
56+ >>> 0 and 3 / 0 or None and 1 or []
57+ []
58+ 黄哥的解答是,逻辑短路,计算2个值和一个逻辑运算符组成的表达式,0 and 3 / 0 发生了短路,
59+ 0 and 3 / 0计算结果为0,但整个表达式求值没有完,要继续计算 0 and 3 / 0 or None and 1 or [] 变为
60+ 0 or None and 1 or [],前面说了and 优先级高于or,0 or None and 1 or []相当于
61+ 0 or (None and 1) or [],进一步简化,0 or None or [],再看上面
62+ x or y if x is false, then y, else x, 所以0 or None or [] 计算为None or []
63+ 最后结果为[]
64+
65+ 第二个纠结是:
66+ >>> 3 and 4
67+ 4
68+
69+ 结果为4,有的朋友纠结说,为啥不是True。
70+ 文档上说了x and y if x is false, then x, else y。
7171
7272真值表
7373
74- ![ ] ( ch5_3.png )
74+ ![ ] ( https://github.com/pythonpeixun/article/tree/master/python/ ch5_3.png)
7575
7676## 关系运算符(也称比较运算符)
7777
@@ -84,7 +84,7 @@ instances of user-defined classes, if the class defines a __bool__() or __len__(
8484 != 不想等
8585 is 是不是同一个对象
8686 is not negated object identity
87-
87+
8888 x < y < z 想当于 x < y and y < z
8989 关系运算符的结果有一个真假值。
9090 >>> 3 < 4
@@ -98,7 +98,7 @@ instances of user-defined classes, if the class defines a __bool__() or __len__(
9898表达式可以为变量赋值,也可以作为if 语句,while 语句后面的布尔表达式使用,所谓的条件判断。
9999下面的图片,展示了python所有的运算符的优先级,从上往下优先级热来热高,同一个行运算符从左到右运算(除乘方外)。
100100乘方是从右往左计算。
101- ![ ] ( ch5_4.png )
101+ ![ ] ( https://github.com/pythonpeixun/article/tree/master/python/ ch5_4.png)
102102
103103
104104请看一面表达式。
@@ -121,12 +121,12 @@ instances of user-defined classes, if the class defines a __bool__() or __len__(
121121
122122 1、if 布尔表达式:
123123 语句块
124-
124+
125125 2、if 布尔表达式:
126126 语句块
127127 else:
128128 语句块
129-
129+
130130 3、if 布尔表达式:
131131 语句块
132132 elif 布尔表达式:
@@ -136,7 +136,7 @@ instances of user-defined classes, if the class defines a __bool__() or __len__(
136136 ........
137137 else:
138138 语句块
139-
139+
140140 4、if嵌套
141141 if 布尔表达式:
142142 语句块
@@ -152,7 +152,7 @@ if之后的布尔表达式俗称条件,如果它为真,如果为真,则执
152152(或称为复合语句)。一般语句块以4个空格为习惯的缩进(相当于c语言的{})。如果
153153语句块暂时不写语句,可以用pass语句暂占位置,pass语句是啥也不做的意思。
154154
155- ![ ] ( ch5_5.png )
155+ ![ ] ( https://github.com/pythonpeixun/article/tree/master/python/ ch5_5.png)
156156
157157两路分支判断
158158
@@ -162,7 +162,7 @@ if之后的布尔表达式俗称条件,如果它为真,如果为真,则执
162162 语句块
163163
164164这个是if 语句后面的条件为真,则执行下面的语句块,否则执行else下面的语句块。
165- ![ ] ( ch5_6.png )
165+ ![ ] ( https://github.com/pythonpeixun/article/tree/master/python/ ch5_6.png)
166166
167167多路分支判断
168168
@@ -179,7 +179,7 @@ if之后的布尔表达式俗称条件,如果它为真,如果为真,则执
179179如果if 语句后面条件为假,就不执行if下面的语句块,转到elif 判断,如果有一个elif
180180后面的条件为真,则执行下面的语句,执行完,就跳出判断结构,继续下面的语句执行。
181181如果if elif 语句后面的条件都为假,则执行else 下面的语句块。
182- ![ ] ( ch5_7.png )
182+ ![ ] ( https://github.com/pythonpeixun/article/tree/master/python/ ch5_7.png)
183183
184184代码解释:上图中,第三行代码,input()函数为python内置函数,直接可以调用,
185185input()函数可以传递一个参数,一般是传递字符串,提示输入信息。input作用是
@@ -190,7 +190,7 @@ input()函数可以传递一个参数,一般是传递字符串,提示输入
190190if 嵌套
191191if 或 if-else 语句中可以是任意语句,当然也可以是if或if-else语句。
192192如果if 或if-esle 中再包含if 或if-else语句,则称为if 嵌套。
193-
193+
194194 if 布尔表达式:
195195 语句块
196196 if 布尔表达式:
@@ -200,7 +200,7 @@ if 或 if-else 语句中可以是任意语句,当然也可以是if或if-else
200200 else:
201201 语句块
202202
203- ![ ] ( ch5_8.png )
203+ ![ ] ( https://github.com/pythonpeixun/article/tree/master/python/ ch5_8.png)
204204
205205
206206# 判断结构实例:
@@ -212,7 +212,7 @@ if 或 if-else 语句中可以是任意语句,当然也可以是if或if-else
212212 year % 4 == 0 and year % 100 != 0 or year % 400 == 0
213213 前面说过,关系运算符优先逻辑运算符,逻辑运算符and优先or,所以可以写成上面的表达式。
214214 为了清晰,可以写成(year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)
215- ![ ] ( ch5_9.png )
215+ ![ ] ( https://github.com/pythonpeixun/article/tree/master/python/ ch5_9.png)
216216
217217
218218# 习题:
@@ -229,4 +229,4 @@ if 或 if-else 语句中可以是任意语句,当然也可以是if或if-else
229229
230230
231231
232-
232+
0 commit comments