Skip to content

Commit 01654ea

Browse files
committed
黄哥所写python文章
1 parent 75522f5 commit 01654ea

File tree

2 files changed

+53
-53
lines changed

2 files changed

+53
-53
lines changed

python/learn_python_follow_brother_huang_4.md

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
# 跟黄哥学习python第四章
22

3-
# 表达式和语句(环境python 3.5
3+
# 表达式和语句(环境python 3.9
44

55
黄哥箴言:过渡沉迷于语法,容易陷入钻牛角尖,学习编程要适当不求甚解一下。
66

77

88

9-
## 表达式是值、变量和操作符(或叫运算符)的组合。单独的一个值是一个
10-
表达式,单独的变量也是一个表达式。
9+
## 表达式是值、变量和操作符(或叫运算符)的组合。
10+
11+
单独的一个值是一个 表达式,单独的变量也是一个表达式。
1112
表达式都有一个值,最简单的一个表达式为一个值,如3,3.9。
1213
复杂的表达式由一些复杂的值和运算符组合起来的。
1314
在python if 语句中 if 后面跟单一变量,这个变量也是一个表达式。
@@ -33,16 +34,16 @@
3334
** 乘方 2 ** 3 结果为 8。相当于import math math.pow(2, 3)。
3435
% 取余或取模运算符,即求出除法后的余数。
3536

36-
![](operator.png)
37+
![](https://github.com/pythonpeixun/article/tree/master/python/operator.png)
3738

3839
## 算术表达式和运算符优先级
3940

4041
有如下表达式:
4142
(3 + 20 * x) / 2 - 12 * ((x + y) * 2) * (a + b)
4243
计算顺序:
4344
(1)、首先执行括号内的运算符,括号内还可以有括号,内层括号内的表达式优先被执行。
44-
(2)、第二,计算指数运算(**)。
45-
(3)、第三,计算乘法(*),浮点数除法(/),整数除法(//),求余运算(%),如果一个表达式中包含多个乘法、除法、
45+
(2)、第二,计算幂运算(**)。
46+
(3)、第三,计算乘法(*),除法(/),整除(//),求余运算(%),如果一个表达式中包含多个乘法、除法、
4647
和求余运算,它们从左到右运算。
4748
(4)、最后计算加法(+) 和减法。如果一个表达式中包含多个加法和减法,它们从左到右运算。
4849

@@ -63,17 +64,16 @@
6364
>>> x
6465
3
6566

66-
6767
赋值语句 x = 3 是这样理解的,内存中为对象3,分配一段内置地址,将整型对象3的引用赋值给x。
68-
x中保存对象3的应用。可以用type()函数,取得变量y引用的对象的类型
69-
id()函数取得变量y引用的对象的内存地址
68+
x中保存对象3的应用。可以用type()函数,取得变量x引用的对象的类型
69+
id()函数取得变量x引用的对象的内存地址
7070
常用id()取得的地址是不是相同,来判断不同的变量是不是对同一个对象的引用。
7171
print(x) 可以输出变量x引用对象的值。
7272
至于语言是怎么设计的,就需要不求甚解一下。
7373

7474
总结一下:对象有3个属性,身份,用id()取得;类型,用type()取得,值,print()输出取得。
7575

76-
## 多重赋值语句的形式
76+
## 多种赋值语句的形式
7777

7878
(1)、增量赋值
7979
x = x + 1 可以写成 x += 1
@@ -98,11 +98,11 @@ print(x) 可以输出变量x引用对象的值。
9898

9999
# python 语句特征
100100

101-
(1)、 # 表示之后的字符为注释,不被执行。
102-
(2)、 一行代码超过80个字符,可以用反斜杠(\) 续行。
103-
(3)、冒号(:) 表示下一行或多行要缩进4个空格的语句块(复合语句)。
104-
(4)、语句块用不同的缩进来表示。
105-
(5)、python 文件以模块的形式来组织。
101+
# 表示之后的字符为注释,不被执行。
102+
一行代码超过80个字符,可以用反斜杠(\) 续行。
103+
冒号(:) 表示下一行或多行要缩进4个空格的语句块(复合语句)。
104+
语句块用不同的缩进来表示。
105+
python 文件以模块的形式来组织。
106106

107107

108108

@@ -121,4 +121,4 @@ print(x) 可以输出变量x引用对象的值。
121121
[黄哥python远程视频培训班](https://github.com/pythonpeixun/article/blob/master/index.md)
122122

123123

124-
124+

python/learn_python_follow_brother_huang_5.md

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
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,空字符串'', 空元组(), 空列表[], 空字典{}。
2727
instances 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内置函数,直接可以调用,
185185
input()函数可以传递一个参数,一般是传递字符串,提示输入信息。input作用是
@@ -190,7 +190,7 @@ input()函数可以传递一个参数,一般是传递字符串,提示输入
190190
if 嵌套
191191
if 或 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

Comments
 (0)