联想说 Python 基础 09 - 循环语句
循环语句
目标:掌握各种循环语句,掌握循环的跳出方式。
先预防一下,这部分内容相对来说可能多一点,因为不太好分开。
这部分主要讲循环,在正式讲语法之前,我们得先了解一下循环。
什么是循环?
这个我觉得给你们来个图可能更好看一些,看这张图

请问图中小狗在干嘛?
它在看花朵在那转圈圈。
什么时候停下来呢?
等到需要加载的东西加载完成了,就停下来了。
假如花朵从最上方开始旋转,再次到最上方是一圈,这样就完成了一次转圈。
但是由于资源(图片、电影..)还没加载出来,所以需要继续转,直到资源加载完成。
像这种重复的做某件事情,我们就可以称呼它为循环。
在 Python 中有多中方式可以让我们实现循环,我们这里来说说 while 和 for。
while 语句
while 的使用
前面说循环能重复做某件事情,而 while 是其中一个能帮我们实现这样的效果东西,那我们来看看它是怎么做到的。
while 语法:
while bool: # 什么情况下让它重复做
pass # 要让它重复做的事情
对这段语法我们做一个解释:
-
while:表示 当...的时候 -
bool:表示条件成立我就去做(好像和 if 差不多哈)和 while 合在一起就是 当条件成立的时候,去干 xx
-
pass:表示重复要做的事情比如图片中则是转圈圈
这整个语法看下来,除了 while 好像没有什么复杂的了。
试一试 - 循环转圈圈:
while True:
print("转圈圈")
这段代码中,条件永远都会成立,所以它就会一直转圈圈,直到死机或程序挂掉。
我们可以给这种一直运行下去的循环一个称呼 - 死循环。
在写程序时,一般都不会期望死循环出现。
结束循环
既然我们不希望程序出现死循环,那自然需要让这个循环停下来。
从上面的格式我们知道 控制循环是否执行的开关在 while 后面的条件表达式上面,只要我们达到某个条件的时候,让这里的条件表达式变成 False 就可以了。
因此,我们在写 while 循环的时候,后面所跟的条件表达式不能是一成不变的。
怎么改?
在说怎么改之前,应该要先了解一下循环的执行流程。
while 的循环执行流程
语法一共就这么几行,所以分析起来也简单。
while True:
print("转圈圈")
- 程序运行到 while 会先判断条件
- 成立了就打印 “转圈圈”
- 然后再判断条件是否成立
- 成立了再打印 “转圈圈”
- 如果不成立,则循环结束了
这一共就两个步骤,其中一个还是判断条件是否成立,那只有在循环的里面改变循环判断的条件了。
改变条件,结束循环
前面我们见到多个同名的变量,最后使用的是哪个?最后一个是吧。
那这里如果在循环中多次改变同一个变量的值,最后使用的是哪个呢?
那肯定是它所能使用的最后一个了。所以我们可以在这个地方做文章,用它来改变条件判断的真假。就像这样:
num = 0
while num < 10:
print("转圈圈")
num = num + 1
说明:
-
这段代码最开始定义了一个
num变量,初始值为 0 -
当 num 的值小于 10 的时候,执行循环里面的程序,打印 "转圈圈" 并且 num 变大了 1 个
注意,这里是每次都变大,是累加的。
-
第二次再判断的时候,num 变大了一个,所以条件变成了 1 < 10 是否成立
-
一直这样循环,直到 num 变成了 10,就成了 10 < 10,就不成立了,就不进入循环了,也就结束了
到这,差不多可以完整的使用循环了。
for 语句
for 语句也可以实现循环的效果,不过它在用法上与 while 有大大的不同。
for 循环的使用
东西差不多,理解的东西就不多说,直接看语法和使用。
语法:
for 变量(临时) in 可迭代对象:
pass
根据 while 来推测,for 开始循环,pass 部分是循环的内容。问题就在于怎么控制循环的开始和结束呢?
这里能怀疑的对象也就是 for 后面那一串(变量 in 可迭代对象)了。
in:表示在 .. 里面可迭代对象:表示~~,就当它是一个大容器吧(不能是一个具体的值)
这个就可以理解为 变量的值是否在容器里面,在里面就执行循环里面的代码。
现在能表示一大堆的数据类型,也就只有字符串了,所以我们可以写这样的代码:
for i in "abcdefg":
print(i)
结果:
a
b
c
d
e
f
g
从结果来看,它差不多就相当于把字符串中的每个字符都赋值给变量 i,直到赋值完。
所以 for 循环的启动与结束完全是看可迭代对象,它里面还有东西,就继续循环,拿完了就结束了。
那如果想像 while 循环那样控制循环多少次,那不是还得写 n 多个元素进去啊,那如果是 100 次呢?那玩完。
搭配 range 使用
Python 早就猜到你会这样去用,所以它提供了一个东西帮你实现了这样的功能,它就是 range()。
range 翻译成中文就是 范围 的意思,也就是说你提供一个范围,它就可以帮你生成这个范围内的所有数。
比如:
range(1, 6)
它就相当于生成了 1、2、3、4、5。注意哈,它不包含最后一个数。
既然能得到一串这样的数,那不就可以像 while 那样控制循环的次数了吗。
比如我要让程序循环执行 10 次:
for i in range(0, 10):
print(i)
这样,它就可以运行 10 次了。
不是说不包含最后一个数吗?这里最后一个是 10 为什么就是 10 次了?
因为在编程里一般不是从 1 开始的,而是从 0 开始,如果你想从 1 开始的话,那就把最后一个数增大一点就行。
由于现在所掌握的知识点有限,所以关于 for 循环暂时也只能说这么多了,再多就会消化不良了。
循环嵌套
前面在讲 if 的时候提到过很多东西都可以 套,循环也是可以的。循环的嵌套也符合 套 的格式,比如 while 循环嵌套:
while bool:
while bool:
pass
for 循环嵌套:
for 变量1 in 可迭代对象1:
for 变量2 in 可迭代对象2:
pass
在格式方面应该没什么问题,唯一需要注意的是 Python 非常注意缩进格式,如果你是包含在下层的,必须得缩进。
除了格式,我们特别需要关注的就是它的执行流程是什么样的。
关于这一点,我们只需要记住一点:条件判断后执行循环体(循环里面的代码),循环体执行完后再执行判断。
既然如此,那我们把上面的嵌套就可以看成两个部分,一个是外层的循环,一个是外层循环的循环体。按照循环的执行流程,这里应该先执行条件判断,然后再执行循环体。
不巧的是,循环体刚好是一个循环,但是我们又需要循环体执行完成后再执行判断,所以此时是先把内层循环执行完成后再执行外层循环的条件判断,再重新执行内层循环......。

原图片位置:https://www.processon.com/diagraming/64e768bdb08bb5658e776803
什么情况下会使用循环嵌套?
比如打印 九九乘法表。这个自己去尝试吧,网上很多答案,这里就不讲了(最好自己先思考做一遍)。
温馨提示:我从来没说羽绒服里面不能套毛衣哈,所以循环里面能不能套分支语句呢?
跳转语句
跳转语句经常和循环一起使用,用来控制循环的执行。
那来了一个疑问,不是说循环的启动与停止是通过条件表达式控制的吗?跳转语句再来控制不是多此一举吗?
回到我们讲循环的最开始的那张图,它是描述资源的加载,当资源加载完成就不转圈圈了。
问:资源什么时候加载完成?
假如每完成一次循环是 1 秒,你总不能这样控制吧:
i= 0
while i < 9:
print('转圈圈')
如果 9 秒还没加载完成呢,又或者它 1 秒就加载完成了呢?不论哪一种,体验都不太好。
这个时候,可以通过 if 语句来判断资源是否加载完成,如果加载完成了,就不再执行循环。
模拟它写一个程序:
while True:
status = input("资源现在状态:")
if status == "加载完成":
print("跳出循环")
else:
print("转圈圈")
整体没有什么问题,只是 "跳出循环" 仅仅是打印一下,后面循环还是会继续。
所以接下来我们就需要通过跳转语句实现 "跳出循环" 。
跳转语句这里主要讲两个:break 和 continue。
break
break 翻译成中文意为 打破(好像到目前为止的关键字,都可以通过翻译来理解哈,学到了学到了)。
打破?打破什么东西?
既然这里是跟循环一起使用,那打破的自然就是循环了(加个打破循环规则好像更好哈)。也就是说通过它我们可以不再准寻循环的规则,从而停止循环。
用法:break
对,没了,就这么一个关键字写在那就行。比如刚刚的案例:
while True:
status = input("资源现在状态:")
if status == "加载完成":
print("跳出循环")
break
else:
print("转圈圈")
在 "跳出循环" 那里加上 break 关键字就行了(效果自行测试)。
有人说 break 放在 if 的内层,难道不是打破的 if 吗?
你可以不写循环,直接在 if 中写 break 试试,它会直接报错,所以不能这样用,它是跟循环一起使用的,打破的还是循环。
continue
老规矩,翻译一下叫 继续。
°ω° 继续?干啥就继续了,我还啥都没干呢!
很多人都会有这样的疑问,我们在做循环,你让我继续,也就是继续循环,那不是还是在循环吗,那要你何用?
其实这个我们得扣一下字眼 - 继续循环。
也就是说继续并不是让你继续干你想干的事情,而是继续干循环。什么意思呢?
先看一下这段代码:
i = 0
while i < 10:
if i == 6:
print("666")
i += 1
continue
print("转圈圈", i)
i += 1
如果没有 continue,程序执行结果是这样的(i+1那个暂不考虑):
转圈圈 0
转圈圈 1
转圈圈 2
转圈圈 3
转圈圈 4
转圈圈 5
666
转圈圈 6
转圈圈 7
转圈圈 8
转圈圈 9
加上 continue 之后,程序执行结果是这样的:
转圈圈 0
转圈圈 1
转圈圈 2
转圈圈 3
转圈圈 4
转圈圈 5
666
转圈圈 7
转圈圈 8
转圈圈 9
区别在哪?
区别在没有 continue 的程序输出了 转圈圈 6,有 continue 的程序没有输出 转圈圈 6。为什么会产生这样的情况呢?这就需要扣字眼了。
前面说扣 继续循环,所以它继续的是循环,而不是继续你当前干的事情。也就是说碰到了 continue,就会停下你后面即将要干的事情,重新继续做循环要做的事情,这就是所谓的 继续循环。
如果你被绕进去了,就只用记住 continue 会停止当前循环后面的代码,继续下一次循环。
嗯,今天先到这吧!!

浙公网安备 33010602011771号