0基础教程~金哥Python自学笔记~P1~循环与控制
本章知识点 :> 循环与控制
很多人跟我说,上一章的知识点已经忘记的差不多了,那我再贴一遍知识图吧
语法
编程可以从这些基本的招式开始练。
复习:基本定律
现在复习一下编程第一定律:在Python代码里,出现的所有东西不是 变量 就是 运算符
Python编程基本能力:可以识别Python代码里,哪些是变量,哪些是运算
myname = '阿金'
print('我是‘ + myname)
codeage = 20
print('我已编程')
print(codeage)
print('年')
我们可以识别到:
- 变量
myname
"阿金"
’我是‘
codeage
20
’我已编程‘
'年'
- 运算
=
+ (字符串相加)
print
- 易错点:在打印codeage的时候,不能用
print('我已编程' + codeage + '年')
,你知道这是为什么吗? - 因为
'我已编程'
是字符串变量codeage
是整数,字符串和整数不能直接做+
法
试一下 在线Python
把几个运算符合起来比较难看懂
字符串 不能 和整数相加,有没有一种运算可以把整数转成字符串呢?如果可以转化,不就可以直接相加了吗,答案是肯定的。
codeage = 20
s_codeage = str(codeage)
试一下 在线Python
- str运算(学名是str函数),可以把一个整数
codeage
转化成字符串s_codeage
, 此时的s_cogeage
值就是"20"
类型转化 | 语法 | 例子 |
---|---|---|
其他类型转字符串 | str | str(123) |
转整型 | int | int("123") |
转浮点型 | float | float("3.14") |
转布尔型(后面细讲) | bool | bool(1) |
- 现在咱们只要知道有这种类型转化的办法就可以,需要时可以回来查这个表
- 现在可以改写一下之前的代码
codeage = 20
print('我已编程' + str(codeage) + '年')
我们注意到,多个变量一层层的运算连在一起的时候,理解起来会有困难,解决办法就是把复杂的算式一步步拆解开来理解:
print('我已编程' + str(codeage) + '年')
a = ’我已编程'
b = str(codeage)
c = a + b
d = '年'
e = c + d
print(e)
- 当然这里不是真的让你把这个算式写这么多步,我们只要在头脑里运行即可,其实随着我们对代码越来越熟悉,这个过程也会变得很自然
试一下 在线Python
比较运算
两个变量进行 比较
是非常本能的一种 运算
a = 1
b = 2
b > a
-
b > a
表示的不是b 大于 a
这个结果,而是比较计算b 大于 a吗?
,这样说不太好理解的话,可以把代码稍微改一下
a = 1
b = 2
c = b > a
print(c)
d = b < a
print(d)
- 凡是运算都有结果,
c
等于b > a
比较计算完的结果。在这个例子里,c
的值为True
; -
b < a
也是一个运算,d
的值为False
; - 在Python里,
True
和False
是布尔类型的变量,分别表示真
和假
- 比较运算的结果只能是 布尔类型,
b 大于 a吗?
为真
(True
);b 小于a吗?
为假
(False
)
试一下 在线Python
除了 >
<
还有别的比较运算
操作符 | 含义 | 例子 |
---|---|---|
== | 等于 | 1 == 1 #True |
!= | 不等于 | 1 != 2 #True |
< | 小于 | 1 < 2 #True |
> | 大于 | 1 > 2 #False |
<= | 小于等于 | 1 <= 1 #True |
>= | 大于等于 | 1 >= 1 #True |
-
易错点:布尔值
True
和False
的首字母是大写的,true
和false
不是布尔型
a = true #会报错
a = True #对
-
易错点:判断两个变量相等用
==
, 千万不要用=
(=是赋值运算)
1 == 1 #正确
1 = 1 #会报错
试一下 在线Python -
其他数据类型也都可以比较运算
print('jinge' == 'jinge')
print('abc' >= 'cda')
print(True == False)
print(1 == 1.0)
print(10 != 'dog')
试一下 在线Python -
布尔类型之间还可以进行布尔运算(不是比较);
布尔运算and
or
not
运算结果还是 布尔类型
-
举几个栗子:
print(2 > 1 and 3 > 1) #为True
print(20 < 50 or 20 > 50) #为True
-
这两个表达式里,先进行比较运算,再进行了布尔运算
试一下 在线Python
while
循环
我们注意到代码是顺序执行的。比如:
a = 0
a = a + 1
a = a + 1
a = a + 1
a = a + 1
print(a) #结果为4
-
再看一个栗子:
北京地铁1号线
print('右走1站')
print('右走1站')
print('右走1站')
print('右走1站')
#一共走了4站
试一下 在线Python
- 上面2个程序的共同点是把
相同的运算
做了多遍,人话:执行重复的运算
- 这种情况,我们可以用
while
循环来写
while
循环的语法:
- 这个语法比较复杂,我会3个方面来解释一下
-
条件
是一个布尔运算表达式,比如a < 4
表示条件是 a 小于4的时候,重复执行下面的语句 -
条件
后面要写一个:
(英文的冒号), 另起一行表示循环执行的语句,要用四个空格
开头
-
现在换一种图示的方法:
while循环
- 要用4个空格把
循环语句块
缩进一级,表达的意思就是这块是循环内的代码 -
:
表达的意思是,条件
写完了,接下来的是循环语句块
-
把
a = a + 1
用循环来实现一遍
a = 0
a = a + 1
a = a + 1
a = a + 1
a = a + 1
print(a) #结果为4
-
套用语法:
a = 0 #之前语句
while a < 4:
a = a + 1
print(a) #之后语句
试一下 在线Python
- 初学者写
循环
语句要有循环思维
循环思维 - 所谓循环思维,就是每次循环不要把条件判断忘记了
-
或者我们可以换一个图来解释:
循环流程图 -
现在改写一下
地铁循环
print('右走1站')
print('右走1站')
print('右走1站')
print('右走1站')
#一共走了4站
-
套用循环语法
a = 0
while a < 4:
print('右走1站')
a = a + 1
试一下 在线Python -
易错点:在循环体内,容易把控制循环条件的变量 漏掉,比如:
a = 0
while a < 4:
print('右走1站')
试一下 在线Python
- 这个写法的错误可以结合
循环流程图
看一下,我们会发现每次做while
条件a < 4
判断时 -
a
的值一直是0
(因为没有在寻循环体改变它) 所以条件
一直为True
- 这样,循环会一直执行(也就是通常说的死循环)
if 分支
-
循环
是初学编程最难的知识点,如果理解了循环,我们再来看if
会轻松很多 - 我们先看看 一种循环的情况
a = 4
while a < 4:
print("右走1站")
- 我们读一下这段代码,会发现
循环体
根本没机会执行,因为条件
一开始就是False
试一下 在线Python
a = 0
while a < 1:
print("右走1站")
a = a + 1
-
再仔细读读一下这一段循环,我们发现
循环体
只会执行1遍,因为执行1遍之后a就为1了,条件
为False
试一下 在线Python -
现在可以这么说,我们对
循环
的理解更进一步了,原来循环
是可以执行0 -> ∞
(无穷) 次重复
if 分支
- 对于只要执行
0
或1
次的情况,换句话说,只要判断执行或不执行的情况,可以用if
语句
if流程图
if语法
-
if
(如果)后面的条件为True
就执行,否则,不执行 -
:
条件
四个空格
语句块
这几个的意思和循环里是一样的 - 现在我们把例子改写一下:
a = 0
if a < 1:
print("右走1站")
#其他语句
- 可以用中文来理解为:如果(
if
)a 小于 1
,就print("右走1站")
试一下 在线Python
综合运用
-
while
循环 和if
分支 没有改变程序是顺序执行的这一点,不过他们可以控制某些语句
执行或不执行 - 可以控制
重复执行
的次数 - 我们大概又讲了20多个
简单重复
的定式,你可以练一遍再开始我们的综合运用
试一下 在线Python
- 不要小看
条件
和控制
,在这两个工具的帮助下,我们的程序才变得智能起来 - 继续上一章的问题:
北京地铁1号线
- 问题:我们还是简化一下1号线地铁问题,假设只为 王府井(8号站)写一个Python程序,实现路人问路,并且通过打印
"右走1站“
"右走1站“
...
或者
"左走1站“
"左走1站“
...
来指路。(考虑特殊情况如果 用户要去的就是 王府井
站,那么请打印 "现在出站"
)
- 思考下怎么写?
- 还记得
”王府井右行乘客问路回答算法“
吗?
start = '王府井'
start_num = 8
end = '西单'
end_num = 11
fangxiang = '右'
zou_num = end_num - start_num
print('往' + fangxiang + ‘走’ + str(zou_num) + '站‘)
- 我把最后一步用
str
运算做了类型转化 - 因为乘客可能往左走,要完整的实现,还得写一个程序
”王府井左行乘客问路回答算法“
start = '王府井'
start_num = 8
end = '东单'
end_num = 7
fangxiang = '左'
zou_num = start_num - end_num
print('往' + fangxiang + ‘走’ + str(zou_num) + '站‘)
- 继续,如果乘客要去的是
"王府井"(当前站)
,我还得再写一个程序”王府井当站乘客问路回答算法“
- 我去~ 这程序太不智能了?对吧
综合运用
- 应用
if
和while
我们完全可以把这3个程序合成一个, 叫"王府井乘客问路回答算法"
- 思路
- 这个编程思路的核心要点是把问题进行分解
- 针对这个场景,我们可以把
"右走1站“
"右走1站“
...
或者
"左走1站“
"左走1站“
...
- 命名为新运算
指路回答法
打印 "现在出站"
-
命名为新运算
当前站指路法
-
现在,我们假设这两个方法有现成
image.png代码块
(熟悉这个名词吧),来整理下思路
-
再稍微进一步,就是主程序的代码了:
image.png
start = '王府井'
start_num = 8
end = '?' #具体执行时填写
end_num = ? #具体执行时填写
fangxiang = ''
zou_num = 0
if start_num == end_num:
当前站指路法
if start_num < end_num:
fangxiang = '右'
zou_num = end_num - start_num
指路回答法
if start_num > end_num:
fangxiang = '左'
zou_num = start_num - end_num
指路回答法
- 现在我们再整理下
当前站指路法
和指路回答法
当前站指路法
- 现在可以写出完整的代码:
start = '王府井'
start_num = 8
end = '?' #具体执行时填写
end_num = ? #具体执行时填写
fangxiang = ''
zou_num = 0
if start_num == end_num:
print("现在出站")
if start_num < end_num:
fangxiang = '右'
zou_num = end_num - start_num
a = 0
while a < zou_num:
print(fangxiang+'走1站') #一定要4个空格
a = a + 1
if start_num > end_num:
fangxiang = '左'
zou_num = start_num - end_num
a = 0
while a < zou_num:
print(fangxiang+'走1站') #一定要4个空格
a = a + 1
- 这样整理容易一些了吗?
试一下 在线Python
下一章会先复习 循环
与 if
的知识,不用担心今天的新知识太多~
p1 知识点总结:
p1 知识点总结