0基础教程~金哥Python自学笔记~P1~循环与控制
本章知识点 :> 循环与控制
很多人跟我说,上一章的知识点已经忘记的差不多了,那我再贴一遍知识图吧
语法
编程可以从这些基本的招式开始练。
复习:基本定律
现在复习一下编程第一定律:在Python代码里,出现的所有东西不是 变量 就是 运算符
Python编程基本能力:可以识别Python代码里,哪些是变量,哪些是运算
myname = '阿金'
print('我是‘ + myname)
codeage = 20
print('我已编程')
print(codeage)
print('年')
我们可以识别到:
- 变量
myname"阿金"’我是‘codeage20’我已编程‘'年' - 运算
=+ (字符串相加)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 -
布尔类型之间还可以进行布尔运算(不是比较);
andornot运算结果还是 布尔类型
布尔运算
-
举几个栗子:
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 循环的语法:
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 知识点总结