联想说 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("转圈圈")
  1. 程序运行到 while 会先判断条件
  2. 成立了就打印 “转圈圈”
  3. 然后再判断条件是否成立
  4. 成立了再打印 “转圈圈”
  5. 如果不成立,则循环结束了

这一共就两个步骤,其中一个还是判断条件是否成立,那只有在循环的里面改变循环判断的条件了。

改变条件,结束循环

前面我们见到多个同名的变量,最后使用的是哪个?最后一个是吧。

那这里如果在循环中多次改变同一个变量的值,最后使用的是哪个呢?

那肯定是它所能使用的最后一个了。所以我们可以在这个地方做文章,用它来改变条件判断的真假。就像这样:

num = 0
while num < 10:
    print("转圈圈")
    num = num + 1

说明:

  1. 这段代码最开始定义了一个 num 变量,初始值为 0

  2. 当 num 的值小于 10 的时候,执行循环里面的程序,打印 "转圈圈" 并且 num 变大了 1 个

    注意,这里是每次都变大,是累加的。

  3. 第二次再判断的时候,num 变大了一个,所以条件变成了 1 < 10 是否成立

  4. 一直这样循环,直到 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 会停止当前循环后面的代码,继续下一次循环

嗯,今天先到这吧!!

posted @ 2023-10-06 15:40  笔锋微凉~~  阅读(11)  评论(0)    收藏  举报