好,同学们,那么这一小节啊,我们去来一个快速体验,说叫腹线场景,什么叫腹线场景啊?就是我们刚才在举例子的时候,是不是说这个媳妇生气了,呃,要打印三遍,媳妇我错了,这是不是一个循环,然后呢还要刷一次晚饭的碗,那这是不是就是一套循环? 那接下来我们说,呃,媳妇说呢,这一套惩罚呀,要连续三天执行,那我们是不是就在这个循环的外面是不是又套了一个外?那么这个时候呢,我们说这是不是就是我们外有循环嵌套他的一个应用场景,那接下来我们就干什么呢?咱们回到刚刚笔记 场景的那个地方,咱们把这个场景啊做一个分析,然后咱们把这个代码呢给他写出来。那接下来我们讲啊,首先第一步,我们要做的事情是什么呢?是不是要有一个乘法?是重复三遍? 媳妇我错了,对不对?哎,这是第一步,第二步是干什么呢?是不是还要去执行一个代码?是刷今天晚饭的碗,这是不是第二步,那么这个大致的代码是不是就在这了? 那然后女朋友说了,然后这一套惩罚呢,要连续三天执行,是不是就把这一套惩罚的外面再套一个外是不是就可以了?那接下来啊,我们就分步骤把咱们这个例子呢去实现一下。 那接下来同学们跟着老师一块回到派场当中来,咱们准备环境写代码,那么首先啊,我们在这里呢打一个注释,对吗?刚才老师说第一步是干什么?哎, 我们是不是就去呃,循环,循环打印打印三次,这个媳妇啊,媳妇,我错了,对不对?哎,媳妇,我错了,好,那么接下来这是第一步,第二步干什么呢?媳妇说了,今天 还要刷晚饭的碗,对不对?爱刷晚饭的碗,那么请跟着媳妇说,上面这是一套惩罚,对不对?哎,上面是一套惩罚,哎,那么这一套一套 惩罚要重复执行三天,对不对?哎,所以那么这里我们是不是就知道了,要把那一套惩罚的外面是不是再写一个循环,是不是就可以了?好,那么也就是说啊,我们一套惩罚,哎,惩罚要重复执行,那 是不是就把它放到一个外循环里面,是不是就可以了?好,那么这个步骤一二三三步有了之后呢?接下来我们就开始写代码了,比如说一个循环打印三次,媳妇,我错了,是不是来一个循环就行, 那么循环的话呢?我们要有三次,是不是就要有计数器了?那老师 i 等于一个零,那么接下来呢? y 来一个 i, 比如说小于,小于几呢?小于三,那是不是取零一二?好,那么接下来我们 pro 去打印,打印什么呢?刚刚我们所描述的,媳妇啊,我错了,是不是就可以了,对不对?当然我们还要让计数器做一个增量,对不对?爱家的唯一, 好,那么接下来当我们去右键运行的时候,媳妇,我错了,是不是打印了三次? ok, 没有问题。那么接下来啊,紧跟着是不是到第二步, 今天的晚饭的碗是不是得刷了?那么这个碗今天晚饭是不是吃了一顿饭,刷一遍晚饭的碗是不是就可以了?那是不是就不需要放到这个循环里面?那,所以也就是说刷碗这个带毛,我们是不是要顶格写?那么是不是放在这个地方,我们来一个 pro 啊?这时刷碗对不对?哎, 刷晚饭,晚饭的碗是不是就 ok 了?那么现在啊,注意了,当我们去右键软的时候,同学们来看,是不是刷晚饭的碗,那同学们啊,注意了,这里 从第七到第十一行,这是不是就是一套乘法,对不对?哎,这是一套乘法,那接下来啊,比如说老师在这个地方呢,再加上一个培训,他,我们就说这一套乘法结束了,对不对?哎,一套乘法结束, 对不对?一套惩罚结束。好,那么接下来啊,注意了,老师右键去乱的话,是不是肯定会打印一个?一套惩罚结束,对不对?那接下来啊,老师在这么个这么着吧,打印一点横杠,这样的话是不是能做一个分割呀?对不对?哎, ok, 搞定一套惩罚结束, 那么接下来进入到第三步,媳妇说了,这是一套乘法,你要连续重复执行三天,那怎么办呢?是不是再从外边加一个循环?但是这 这个循环的话,是不是也要有一个次数的限制?那是不是就还得来一个外层循环的计数器?那比如说呢,老师来一个接,然后初始值是不是等于一个零? 那么然后呢,是不是放一个外啊?外啊?然后条件是不是就是接,比如说小于,嗯,三是不是就可以了?好,那么接下来啊,这一套惩罚是不是要重复执行?那我们是不是就要把它缩进到接这个计数器所控制的循环里面去? 并且我们的接是不是也要做一个增量,对不对?哎,那么加等于一, ok, 那么接下来这个搞定之后,同学们注意来看了啊,当老师右键转一下,走你, 我们来看一下啊,把这个控制台往上拉,咱们拉大一点,我们发现媳妇我错了,这是不是内层循环打印了刷晚饭的碗,这是不是就是一套惩罚? 那么这一套惩罚是不是重复执行了第一天?第二天是不是第三天? ok, 那我们现在是不是就用一个例子去验证了,我们确实在编程语言当中也允许外偶循环签套使用的,那 外偶循环嵌套的话,咱们来看一下这个圆代码啊,把控制台关掉,是不是?无非就是一个外偶,里面是不是又嵌套了一个外偶而已啊?对不对? ok, 那么接下来啊,同学们跟着老师一块回到咱们的笔记当中来,在 笔记里面我们来看一下,咱们是不是就应用了外偶循环嵌套的语法,不管是外层的循环还是内层的循环,那么只要单独提出来,是不是都是我们最基础循环的一个语法?那?只不过在这个时候,是不是我外层循环要控 控制,接下来冒号下方所有带缩进的代码是不是都要重复执行,甚至于包含里面的条件二的这个循环是不是也是在重复执行啊?对不对? 哎,这就 ok 了,那么这是我们一个外循环嵌套这么一个快速体验例子,那其实是不是就是综合运用了我们这个语法,把这个语法实际应用了一下而已啊,对不对? 好了,那接下来啊,老师把这个循环签套啊这么一个快速体验的例子讲完了,那老师把咱们的视频呢稍微暂停一下啊。
粉丝7.8万获赞29.1万

这节课我们来讲 vi 循环潜逃,现在来看上节课的这段代码,这段代码一开始让用户输入账号密码,如果账号密码不对,就会让你一直输, 我们先不考虑输错的次数限制,限定次数改条件就好了,这个很简单,你自己后面实现一下,现在我们就让他输错了,就一直输,直到输对了。输入对了之后,我们是不是就可以登录到 qq 界面了?这时候我们就可以进行各种操作了,比如找一个女生聊天, 看女生的 qq 空间等一系列操作。那我是不是可以和女生聊完天之后再去看她的 qq 空间,或者再次进行其他的操作,都是可以的吧。也就是说登录成功之后,不应该立马结束循环, 而是应该进入另一个循环,这个循环就专门用来循环里的各种操作。这一系列操作我现在就简单用音破洞和 print 来表示一下就好了。音破洞请输入你的操作, 然后复制给 x, 然后 print 一下这个操作。 f 引号正在大括号 x, 这个能看懂吧?前面讲过的格式化尺寸。这样写的话会有一个问题,我们来预信看看。一开始让我输入账号密码, 我输入错误,他就会让我一直输,这没问题,然后我输入正确的账号密码,衣服判断成立,就可以先打印登录成功,然后进入这个 vip 循环。但是这个 vip 循环我们并没有写退出机制, 也就是代码运行到这里之后就变成死循环了,会一直让我们输入操作来敲回车看看,我输入一个和女生聊天就打赢了。正在和女生聊天,输入看女生的 qq 空间,就打赢了正在看女生的 qq 空间, 我输入什么就执行什么,永远退出不了这个循环,因为这个循环结束不了,就执行不到外层的这个 break, 外层的这个循环也 结束不了。所以这里我们应该设置一个退出命令,比如我设置只要输入 q 就退出这个程序,就可以这样写, eve action q, 那就应该结束这个循环,再写一个 break。 上节课我们说过了, break 只会结束当前这一层的循环, 然后这一层循环结束之后,就会接着执行同级的,后面的代码,也就会执行后面的这个 bree, 这个 bree 就会把外层的循环结束掉,然后整个程序也就结束了。刚刚我们程序一直没有退出,内存里放的还是我们修改之前的代码, 所以我们修改之后要重启一下程序,然后输入正确的账号密码,就打印了,登录成功,然后让我们输入想要执行的操作,我就输入偷菜,就打赢了正在偷菜,我再输入和女神视频聊天,就打赢了正在和女神视频聊天,现在我输入一个 q, 接着这个衣服判断就会成名,然后就会直 这个 break。 注意,这个 break 结束的是当前内存的循环,然后会接着运行这个内存 vi 循环,后面的同级代码就会执行这个 break, 这个 break 一直行,外面的 vi 循环也就结束了,所以我一敲回车,整个程序就都结束掉了。所以说当你用 break 结束欠套多层的 vi 循环,那每一层都要配一个 break, 这样感觉上市有点麻烦。我们前面还讲了另一种结束循环的方法,你可以把所有循环的条件都设置成同一个变量,然后只要这个变量已被更改,那所有循环的条件就都不成立了。然后要注意这种方式循环不会立即结束,会把后面的带满,执行完毕才会结束。 你可以用衣服判断来避免这个问题,把退出的代码写在衣服下面,把正常循环执行的代码写在 l 四下面。这很简单,我就不操作了,你可以当成课后练习自己做一下。


接下来我们学习循环嵌套,学完循环嵌套之后,要求大家能够知道循环嵌套的格式和执行流程。在讲解循环嵌套之前,我们先对循环嵌套做个简单的描述。看这里我们的语句分为顺序语句、分支语句和循环语句。 我们的每一条语句,他以分号结尾表示一句话结束。我们的分支语句有易辅和思维词两种格式。 一对大括号表示衣服的整体结构,整体描述的是一个完整的一副语句。一对大括号表示 swit 的整体结构,整体描述的是一个完整的 swit 语句。 我们循环语句有三种,一对大块表示 f 的整体结构,整体描述一个完整的 f 语句。一对大括号表示 vivo 的整体结构,整体描述一个完整的 y 鳌语句,读 w。 分号结尾整体描述一个完整的都话语句。我这里想要说的是,其实我们可以把每一种语句看成是一个整体,他这个整体就是一个语句。 来我们说一下,任何语句对外都可以看的是一句话,一句代码。来看右边一幅条件里面做了一个输出语句, 他其实等同于应付条件里面做了一个一副 l 字语句。你现在把他俩都看成是一个语句的话,那么他俩其实是相同的,只不过上面是一个简单的输出语句,下面是一个复杂一些的一副 l 字语句而已。 那么接着再说这个衣服里面套了一个衣服,这叫分支语句,包含分支语句,他称为分支嵌套。那么知道分支嵌套之后,我们在他说循环嵌套就是循环语句, 句中包含循环语句,称为循环前套,看这里一个或循环里面包含的一个或循环,你把里面那个复循环看成一个简单的语句,他就是一个语句, 那么这个就简单了。好了,看完这个之后,我们知道了什么是循环嵌套,那么接下来我们到代码中来演示一下,打开, 我们准备好了加瓦文件,里面有循环嵌套和一个需求的注视信息,我们来看一下这个需求在控制台输出一天的小时和分钟,我们 一小时有六十分钟,一天有二十四小时,所以这里我们给了一下分钟和小时的范围,分钟是零到六十,他到六十的时候就要向前进一位,对吧?所以我们这写的小于六十,没有写等于六十,同理,小时到二十四 手就变成了下一天,所以这里我们写了一个小于二十四。好了,那么这是我们最终的需求啊。现在我们先不管最终的需求,我们先来看我们程序中现有的这段代码,这是一个输出语句,他输出了零时零分到零时三分, 那么这是输出语句,他输出了一十零分到一十三分,那么这个输出语句输出了二十零分到二十三分, 那么这个操作我们先来变异执行一下,加吧。 c, 走,你加了,走,你 看一下控制他的输出,这个大家没有任何问题吧?好,既然没有任何问题,那么现在我把它给注视掉,我认为这样写太麻烦了,我想 简单一些,先把他用循环改进一下,我们看一下这个输出语句,他这里面只有这个零一二三是变化的,其他的都是 定的,说白了都是一样的,所以我们只要能够让零一二三什么变化就可以了,也就是说找到一个范围,从零到三就可以了。来写一下循环改进,那么在这里 我们来写一下 f 变态 minit 等于零 minit, 让它小于四 minit 加加,那这样这个 minix 就能取到零一二三。我拿一个任意一条说出一句,放到这里来看一下,我先改 下啊,因为这个零食你看这里是不变的,后面这个零一二三是变化的,所以在这里我先把它分一下, 然后在这呢我们做个家,在这我们也做一个家,把它改成 minice。 好嘞, 第一个修改,我们做完了,来变异执行一下。变异执行来看一下零时零分到零时三分做完了,也就是我们通过这样一个循环把这个代码做完了。接下来我们来一个分隔线做下面的这个操作, 一十零分到一十三分,他和这个的区别就在于这个地方零变成一了,那么我直接 ctrl c ctrl v 扔到这里,把它改成一就 可以了,其他地方是不需要变的。来,我们再来看一下变异执行,一时零分到一十三分就出来了,那么在同理这个就简单了,直接选中他 ctrl c ctrl v 把这改成二就 ok 了。来看一下编译执行 好了,到这我们用循环改进了我们这个程序,然后呢他的动作和前面这是一模一样的。接着我们再来看这一段 代码,这一段代码以及这一段代码来比较一下,发现他们几乎是一模一样的,只有这个地方在变零一二,那 那假如我能取到零一二,其他的是不就是重复的?好嘞,那么在这我们再来做一个操作,把它给什么注视掉先,我现在先取到零一二,负电塔二等于零, 然后我让这个二小于三二做一个加加,这样他就能够取到零一二了。接下来你看他是重复的,对吧?就是他,他和他三个是重复的吗?所以我随便拿一个进来, 你把它看成一个整体,就是一个语句,不就完事了吗?拿进来放到这个复习盘里面来,我们再来看一下, 然后把这个变了就可以了,因为他是变化的,改成二加就完事。 好,那这个做完之后,我们先来变异运行一下,走,你走,你看 看一下,这一次这段代码就完成了,上面的动作也完成了,用它用循环改进的动作,那这个显得就简洁很多了,做的结果是一样的,而他要简洁很多, 那他是怎么实现的呢?我们来看一下这个执行,你看啊,这有个循环,里面有个循环,这就是循环嵌套,因他二等于零零小于三,所以他进来会执行这个整体来看下这个整体的执行。首先从这开始, minit 等于零 零小于这个四,所以他进来输出这次的二,他是零,那就是零时零分。接着这个输出已经做完之后,要从 mini 加加变成一一小于四,进来这个还是零,那么零时 一分。接着迷你家家变成二二小,一次进奶零十二分,家家变成三三小,一次进奶零十三分, 那么再加加变成四四不小于四,所以这个循环就结束了,这个输出了一个分隔线,那么也就是说外面的这个循环他做一次,里面这现在做了四次,就是这个循环他要做四次, 那么再接着二加加变成一,一小于三,现在他又要做四次,那么这四次就把这一个输出给做完了。 同理最后二加加变成二的时候,他做四次就把这个输出给做完了。好了,到这我们发现这个循环欠套,他可以让我们代码更简洁一些, 而且你简单看就是把外面看成是我们的循环语句,里面看成一个整体就是一个简单语句,那这就好理解多了,只不过他本身就是一个循环语句。 好嘞,到这学完签套我们就知道了。那么这里我们要写个东西啊,就是你看一下这个外层循环,这是 r, 其实也就是小时,所以我们说一下外循环控制小时的范围, 内循环控制看这里 minis 很明显就是分钟的 范围,所以接下来我把它也给注视掉,那么我把这个整体 c ctrl v 来回到我们这个地方,小时和分钟的范围我给出来了,从您开始一个小于六十,一个小于二十四, 来,先说小时的他小于二十四,所以把这个三改成二十四,那么这个分钟的小于六十改一下。好嘞,改完之后来看一下编译执行, 在控制台就输出了我们想要的结果。来,你可以往上拉着看一下,你看这就是我们想要的结果。好了,这里我们说一下这个外循环小时, 他每走一个小时,那么内循环的分钟就要走六十分钟。好,到这我们这个 需求在控制台输出一天的小时和分钟就做完了,我们再来回顾一下这个代码,首先我们是通过输出语句来做的,接着发现他代码重复了,我们用循环改进了,我们单个循环改进之后发现这些循环他也是 有代码重复的,所以最终我们用循环嵌套改进了。而通过这个循环嵌套,我们看出了外循环控制的是小时的范围,内 循环控制是分钟的范围,所以最终我们给出了二十四和六十就完成了我们的需求。好了到这关于循环嵌套我们就讲完了。

今天我们来学习 python 的 while 循环嵌套,跟我们之前学习的判断语句 if 一样, while 循环也是可以进行嵌套的。 while 循环嵌套简单来说就是 while 里面还有一个 while y 循环嵌套的语法格式也非常简单,我们只需要在外层 y 循环内增加四个空格缩进,再写一个内层的 y 就可以了。 接下来我们来看一个简单的例子,用 while 嵌套打印矩形,在这里我们规定矩形的行数和列数都为五。 在使用 well 建套之前,我们先使用之前学习过的 well 循环来实现概 功能。首先我们先在 y 循环上方定一个变量行数 i, 因为我们说行和列都是从第一行第一列开始,而不,而不会说从第零行,所以我们就给 横竖变量 i 复值为一。接着我们再使用 y o 循环,循环条件就是 i 小于等于五。 在 y 循环内,由于列数也为五,所以每次循环输出的时候,我们都要输出五个信号。 不要忘记每循环一次,计数器就要加一,否则就会进行一个无限循环运行程序。我们可以看到输出结果成功输出了一个矩形,那简单的 yo 循环做完了,我们接 接下来就使用外要循环嵌套来打印矩形。我们在刚才的行数外要循环里面再增加一个小循环,专门负责当前行中每一列的显示。所以我们定一个裂变量接,同样给它复制为一。然后当列数小于等于五十, 输出信号有多少列就输出多少个信号。在引号后面我们还使用了 end 等于引号,目的是不自动换行,不然的话每输出一个信号就是一行, 我们还不能忘记要计数器加一。在这里有一个很重要的 print 引号, print 括号,括号里面可以不带引号,作用就是自动换行, 因为我们刚才使用了 end 等于引号,所以 pro 函数它不会自动换行了,所以我们添加一个 pro 的括号,目的就是使每一个信号输出完成后都能够自动进行换行,不然所有的信号都会输出在一行里面。 学完了打印矩形,我们再来学习一下打印三角形。打印矩形和打印三角形是相类似的,代码结构上是没有什么变化的,但他们最大的区别就在于第二个 y 循环里面的判断条件。我们可以看到右边程序的运行结果, 可以看到每一行的星都是逐行递增的,并且第 n 行有第 n 个星,所以我们第二个判断条件就不单纯是列 数小于等于某个固定的值,而是列数变量小于等于行数变量。行数循环了多少次,列循环输出的信号就有几个。那我们运行程序可以看到程序成功输出了一个三角形, 有刚才打印三角形的案例作为基础,我们再来看一道非常经典的实例,打印九九乘法表,这里是不是就是和我们刚才打印三角形也是相类似的, 输出结果也是一个三角形,他们唯一的区别就是新号变成了多少乘多少等于多少,所以我们就把刚才代码中输出新号改成输出这个代码格式就可以了。 那我们就可以使用之前学习过的 iphone 号站位符进行一个站位输出,同样我们也可以使用 f 进行一个格式化输出,在大括号里面插入一个变量,在这里我在 and 等于心哦 等于引号中间加入了一个杠 t, 杠 t 它是一个转译字符,它是为了让程序输出时数据能够对齐。那我们运行程序也可以看到九九乘法表也成功运行了。

好,下面我们来看 y 循环。首先看一个普通的 y 循环,先是定义了一个变量, a 等于零, y 小于算,也就是说当 a 满足小于三条件的时候,打印一下 a, 然后 a 进行递增, 那这里需要说明的是, a 加等于一,是等加于 a 等于 a 加一的,这是一种缩写的方式, 那我们来解读一下这个代码。 a 等于零的时候,进入到,因为它满足 a 小于三的条件,所以进入到 y o 循环体, 打印一下,然后 a 加一,那这个时候 a 等于一了,依然满足条件,继续递增,那 a 等于二的时候,仍然满足条件,继续加一递增, 那加一之后的结果就是三了。三的时候就不再满足 a 小于三了,所以就跳出 y o 循环,也就是说此时 a 等于二,所以最终的结果就是 v 等于零一二。 那下面我们看由 break 的 wifi 循环,依然是定义了一个变量, a 等于零, 那 y o 处,也就是说它是一个死循环,永远满足条件,那进入到 y o 循环体,首先打印一下 a, a 递增, 如果 a 大于三的话才 break, 那此时 a 递增之后是一,所以不满足这个条件,继续进入 y o 循环,那第二次 运动之后, a 等于二,依然不满足这个条件,所以继续循环。那当 a 是三的时候, a 加一就是四了,那四了之后就满足了这个 if 条件,所以就 break 掉了,所以此是 a 是三,我们看到这个结果就是 a 是零一二三,所以就结束 well 循环了。 那下面看有 ails 的 wild 循环,那这个 ails 和 for 循环的 ails 其实效果是一样的, 当不满足 y o 后面的条件的时候,就进入 l s 代码块,如果在 y o 循环里面遇到 break, 那就不会执行 l s 语句了,所以这个效果 和 for 循环的 ails 是一样的。下面看无线循环,也就是死循环, 此循环的时候,那程序永远无法跳出循环体,我们作为开发人员应该避免这种情况的发生,一定要在循环体中定义上跳出循环的条件。 首先我们看一下这个代码, y o 一等于一,也就是说这个条件永远长,那进入到代码块,输入一个内容,我们来执行一下这个代码, 那我输入一个二,那他仍然让我输入内容,再输入一个八,那继续输入内容,那这个循环体永远不会 结束,所以他没有一个跳出条件,就是说这个程序是有问题的,那我们手动来把这个程序停掉,只能是通过这种方式来停掉了, 所以我们作为开发人员应该避免这种情况,那下面这个死循环其实和上面是等价的,那上面是 y o 一等于一,那这里是 y o 处,这两个是等价的,就不再演示。 那下面总结一下两种循环的应用。 for 循环一般用于便利读取可迭代对象, 比如说列表、语言组、字典这些数据类型,那 vivo 循环一般是用于重复执行一个动作 或者一个逻辑,当满足一定条件的时候退出循环,那这是两种循环的不同的应用场景。第二就是关于 break 和 continu, a break 是跳出循环,当存在嵌套否循环的时候,他只跳出内层否循环, 那 continu 是跳出本轮循环,遇到 continu 的时候, continu 下面的语句就不再执行,而是进行下一轮的循环,这就是关于 python 的两种循环语句。

否循环和 yo 循环你真的弄懂了吗?在这个代码中,我们使用的就是一个嵌套的循环,其中外循环是否循环,内循环是 yo 循环。我们先来看否循环, 否循环是单次循环,依次循环便利设定的某一个取值范围。在这个代码中,否循环是需要依次循环二到一百的整数。那很多小伙伴就有疑问了, 这里为什么写的幺零幺呢?在这里 range 概括的范围是包前不包后,也就是循环的范围是大于等于二到小于一零一之间。当数值大于等于一百零一的时候,循环就结束了。而 y o 循环是一种条件循环, 当满足条件时进入循环,进入循环后,当条件不满足时就会跳出循环。在这个代码中,我们给他设立的条件是挨小于 an 时 时进入循环,并且每循环一次,我们的 i 都会进行加一,当达到一定数值 i 大于等于 i 的时候,就代表循环结束了。而这个代码就是通过两个循环来找出零到一百以内的质数。小伙伴们都懂了吗?如果这期视频对你有帮助,别忘记点个关注哦!


今天我们来学习 well 的嵌套循环,那么什么是嵌套循环呢?也就是当我们有了一个 well 循环的时候,又在里面嵌套了一个另外一个 well 循环。 然后呢我们将要用我们的 while 欠到循环来输出我们的乘法口诀表,那这个题应该怎么做呢?好,我们来分析一下。 首先呢,我们可以将它分成这个第一行,对吧?第二行,第三行。好,我们来看这这个下面第一行的时候就是从一乘以一等于一。第二行的时候,一乘以二等于二,二乘以二等于四。第三行的时候是一乘以三等于一,二乘以三等于六,三乘以三等于九。发现什么规律没有?我会发现第一行的时候他这里就是一,那第二行的时候这里就是二,那这里还是二。第三行的时候这里就是三, 这里还是三,那相当于这一个我们就可以把它看作一个变量。那什么变量呢?也就是第一行、第二行、第三行,一直到第几行,一直到第九行,所以我们可以让一个变量,这个变量是哎,他可以等于一,然后呢让他一直哎,从哎一直变到他,相当于哎,要等于啊,我们的一个 a 加一,然后呢从我们这个 i 呢一直变到变到九,对吧?也就是说 i 一直变到九,那好,这个规律我们找到了,接下来我们来找这个规律,首先它是一乘一,对吧?那接着第二行的时候就一乘以二,二乘以二,第三行的时候都是一乘以三,二乘以三,三乘以三。我们会发现啊,这个变量他永远是从一开始的, 然后呢他但是他的极限是什么?他也是每次都是加一,是吧?他也是从一加到二,加一加成二,二加一加上三,他也是这样,那他的截止截止的一个条件是什么?他的条件就是他永远是小于我们这个小于等于我们这个 i 的,对吧?永远是小于等于我们的 i 的, 那这里呢,我们就可以看出它有两个循环,那这个我们应该怎么把它给呃放在一起呢?好,这里其实就是这样的话,虽然我们这个 j 呢,它是以这个 i 为主的,所以这一个呢?这个 j 它其实就是一个内循环。好,我们来做一下我们这个题, i 等于一,对吧?然后当我们这个 i 他小于等于九的时候,我们就来执行,然后这个时候呢,他还要每次 i 都要等加一。好,我们就已经把这个外面这个循环已经写好了,我们来写里面的。这个里面的因为是欠套呢,所以我们要根据这个格式要给他给弄好了。首先我们这个 j 是等于一的, 那么哎,这他的范围是小于等于我们的 i, 接着这个欠套要写好,那我们就会发生什么事情啊?我们可以 当我们 i 等于一的时候,那么我们这个 z 就是我们的结果,是不是就等于这个一 j 乘以 i, 对吧?好,就等于 j 乘以 i, 那我们再来验证一下,当好现在 i 变成二了,我们 i 变成二的时候呢? aj 又从一开始,是吧?然后就是一乘以二等于二,呃,然后呢?还在这个循环里面,因为这个时候 i 已经变成二了,那么我们这个 j 是不是还需要做一个循 等于 j 加一,对吧?这个时候呢, j 就变成了二,然后二还小于二,那么就是二乘以二等于我们的四,接着呢 j 就变成了三,哎,这个时候三已经不小于二了,我们就跳出循环,这个时候再来循环,我们这个 ii 就变成了我们的三, 接着呢就到第三行了,第三行又开始来执行,这呢又是从一开始啊,那一是小于等于三的这个 z 呢,就等于我们的一乘以三,然后在这呢就变成了从一变成了二,对吧?然后二还是小于我们这个 i 其实是三,那就是二乘以三等于六,这个时候呢,这一呢就等于我们的 三,二加一,也就是三,三还是小一点三,那么就是三乘以三,这样呢,我们这个循环的一个闭路就完成了,但是我们注意啊,在这里啊,我们发现我们没有输出,对吧?所以我们这里需要输出一下,输出呢就 print print, 首先是 j, 然后逗号原样输出,就用我们的这样一个 双引号的方式,然后 g 乘以 i, 然后再来,然后 g 乘以 i, 就等于我们的一个 z, 对吧?好,然后我们把这一段话复制下来,然后粘贴到我们来运行看一下, 好,我们来运行看一下。好,我们运行。看到他这个呃思路是对的,就是一乘以一等于一,对吧?一乘以二等于二,二乘以二等于四,一乘以三。好,一从一开始到二到三,对吧?每次都是这样,但是我们会发现我们的格式是不对的, 他其实他每次这个 print 输出的时候,他都进行了一个换行,那么怎么才能不让他换行呢?这里就要写个摁的等于 n 的等于我们的星号,然后里面比如说空两格,好,现在我们再来运行。哎,我们发现现在他就不让他换行了,而是用我们这个 n 的里面有两个空格,他就这里就是两个空格。但是我们发现啊,这个格式还有一点不对,就是当我们执行完 就是第一个里面的内循环的时候,他是不是应该换行啊?然后所以说我们这里呢,当他执行完以后呢,我们应该换行,那这一个要写一个换行符号,并且呢这个换行符号呢,应该是跳出这个外绕循环再来写,所以应该他缩进方式应该是对齐这个外绕循环的, 然后我们这里换行好,我们再来运行。哎,发现是不是就对了?一乘以一等于一,一乘以二等于二,二乘二等于四,当他执行完,每次执行完之后呢,他都进行一个换行换行,然后这个呢就从第一行变成第二行,变成第三行,一直变到第九行,这个呢就是我们外偶的签到循环,你学会了吗? 如果还有什么逻辑上的,呃,就是反应不过来,我们可以用草稿纸画一下,然后把每一个每一次他的一个循环都写在纸上,那我们下次再见。

编程五分钟, 哈喽,各位同学大家好,欢迎回到编程五分钟。那么上节课我们已经把循环的 continue 关键字也讲完了,那么我们 well 循环和衣服判断基本上的基础知识就已经学完了。 在之后的课程中呢,老师还会给大家安排我们否循环的使用。那么现在呢,我们先练习几节课,关于 will 循环和 if 判断的综合练习。 ok, 我们来看题目,找出一百到九百九十九以内的所有水仙花束,实现如图,所如下图所示的效果,水仙花束,好,那我们来看水仙花束是一个什么概念?水仙花束呢?那前面我们就不用看了, 水仙花数是指一个三位数,他的每个数位上的数字的三次密之和等于他本身好。例如一的三次方加五的三次方加三的三次方等于一百五十三。好,那么有同学可能不知道这个次方是什么意思啊?那我来讲简单讲一下, 比如说二的,这是一个数学知识啊,二的三次方,我们标准叫密。二的三次密 是什么呢?也就是三个二相乘啊,等于二乘二乘二。好,这个是二的三次方,同样呢,我们四的 二次米就是二个 二,两个四相乘相乘,也就是四乘四啊,这就是我们的密。那么在 python 里呢,我们打开一下交互模式啊, 在拍子里呢,我们用星星两个星号来表示 me, 比如说二的三次 me, 比如说四的两次 me, 对吧?好,那我们来看这题怎么做呢? 首先它的范围是一百到九百九十九,也就是说我们可以定一个初始值, a 的初始值等于一百,并且呢, well, a 小于 一千的情况下啊, a 加等于一,那么这个时候呢,我们基础条件已经写完了, 程序的基本框架也搭好了,那么接下来想要找到水仙花束,对不对?那么水仙花束呢?他是不是要每个数位上的数字,哎,每个数位上的数字我们会求吗?求一个三位数,每个数位上的数字还记得吗? 比如说啊,我 a 等于一百二十三,那么我是不是有个位十位百位可以来求呀,对不对?那我的先求百位吧, 我的百位是不是就等于 a 整除一百就是我的百位,那我的十位呢?是等于 a 先整除十, a 先整除十,就比如说一百二十三,整除十,我们得到十二十二,我们再取十,是不是可以得到二, 好,各位呢?各位,我们是可以直接 a 取,于是就可以了啊,那我们先来验证一下吧,我们把这段单独拎出来验证一下,新建一个 假设 a 等于七八九,好,那么我要 print g s, 好,然后呢?建个符,设置一下,运行看一看结果, 九八七,没问题。个失败好之后呢,我们就是对他进行一个判断, if 我们的循环,我们的 a 是不是从一百一直走到九百九十九,那么在这个情况下呢?如果说我个位个位的三次 me 加上 个位的三次 me 啊,再加上十位的三次 me, 再加上百位的三次 me, 最终会得到一个什么结果?如果说他刚好和我的这个 a 相等,那么是,那么是不是代表他就是一个水仙花束,对吧? 我们来输出一下此时的 a, 好,我们看一看结果,一五三三七零三七一四零七,对不对?那我们要满足这个格式输出,我们应该怎么写呢? 可以这样写啊,添加一个格式化符 f, 对吧?好,然后呢? a 是变量,给它括起来,加上后面的中文格式是水仙花束。 ok, 滤镜看一下。 好,一百五十三三百七三百七一四百零七。好,那么这道题我们就做完了。好,那么本节课的编程五分钟就到这里,同学们,我们下次再见。

上节课我们介绍了累加器,并且结合这里的放循环计算出来了每日的本月累计出货量是多少。 但是这样一个 vba 程序它是不完美的,具体体现在我们的否循环,它固定了循环的起始值和中指值,即循环的次数是固定的, 但是我们的题目需要每日都记录出货量及这里的数据,他是不固定的,每天都在增加, 那我们要想计算出每天的本月累计出货量是多少,就需要每天都来修改这里的否循环它的中指值,所以每次计算都要手动的修改下程序,那这样一个程序它是不完美的。 那有没有可能让我们的程序根据这里数据的多少来自动确定循环的次数呢?是有的,这就是本节课我要介绍给大家的 y o 循环,我们来看 y o 循环它的逻辑, why 是当什么时候的意思,那 why 循环就是我们给他设定一个条件,每一次循环他都会判断一下是否还满足这个条件, 如果满足就继续循环,循环完之后再来判断一下这个条件,如果还满足,那还继续循环,然后再循环。判断循环完之后再来判断这个条件是否满足,如果不满足了,那么就跳出循环。 好理解了 while 循环的基本逻辑,接下来我们看它的代码具体如何写,我先删除之前的 fox 循环, 同样是先声明两个变量, i 和 s。 在这里插入一个知识点,就是我们可以给每一行代码写一个注释, 即使用我们自己人类的语言来解释一下这行代码他是什么意思,或者说运行原理等等。比如说这一行代码 可能时间长了,大家就记不清这里的 i 和 s, 他们分别是什么意思了。所以我们可以在这行代码的后面敲几个空格,先输入一个英文的绊脚单引号,然后我们输入注视,比如说变量 i 代表行号, 变量, s 代表月累计出货量。 好,写完了我们回车,大家看我们的注视,它变成绿色的了。 这一行字在 v b a 程序运行的时候,它是不运行的,它的作用只是帮助我们解读这一行代码。 好,我们继续写代码。 while 循环也是有固定格式的,开头是 while, 然后一个空格,接下来就是条件,这个条件我先用中文条件来代替, 然后呢,中间是循环体,最后我们要以 w and 来结束这个循环,这两行代码是 while 循环的固定格式,尤其是后面的 w and 这样一个结束词,大家不要忘了它和 for, next 这些都是类似的,有开头有结尾。 好,接下来我们看中间的循环体,我们按个 tab 键缩进这里的循环体,其实也是用累加器来计算这里的出货量总和的。这个上节课我们讲过了,所以我直接来写 s 等于 s, 加上 sales 的 i 行三列。好了,这个 y o 循环的主体结构我们都写完了,接下来我们看这里的条件要怎么写。 我们先看这里的声标变量,我们声明的变量 i, 它为整数型,代表这里的行号 变量 s, 他会 w 型,代表这里的每月累计出货量。那好,那系列的这些数据我们就可以使用 csi, 我直接写出来 c 二四、 i 行三列来代替,因为这里的 i 它是变量,是不固定的,所以这里的 c 二四、 i 行三列,它可以代表这里的 c 二单格,也可以代表 c 五单格,同样也可以代表这里的 c 十五单格, c 十六、 c 十七单格等等。 现在这里的数据是每天都在增加的,是不固定的,但不管它有多少数据,我们累加的只是有数据的单元格,再往下是空单元格的时候,我们就不进行累加了。所以这里的 y 循环的它的条件我们可以写成, 当这个 c、 s、 i 行三列不等于空的时候,我们就进行循环进行累加。反过来说就是我们循环扫描系列的单 格,从 c 二单元格开始往下一直扫描,当扫描这里的单元格它是空的时候,我们就不进行累加了,就直接跳出这个循环,执行下面的 crs 二行六列等于 s 这一行代码, 这就是 while 循环它的基本思路,当满足条件的时候我们进行循环,不满足条件我们就跳出循环。 但现在这个循环还有问题,在之前我们的否循环当中, i 等于起始值到终止值。根据上节课我们讲的,让一个变量等于什么?就是给他负值, 所以在放循环当中是自动的依次给变量 i 复值,从起始值到终止值。但是在我们的 y 循环当中,我 我们并没有让这个 i 等于什么,所以说是没有给变量 i 负值这样一个操作的。那在之前我们也介绍过,如果一个变量没有给他负值,那他就是空的,那在现在这个外循环里面就是 sales 空行三列 在一个项目当中是没有空行三列这个单元格的,所以我们目前这个程序还是无法运行的 好。讲了这么多,铺垫了这么多,我就想让大家记住一点,我们的 y o 循环无法自动地给变量进行复制, 所以我们在 y 循环之前,要先给变量 i 负一个七十指,大家看我写代码,在 y 循环的前面写上 i 等于二, 先给这个 i 负一个歧视值,那好,现在 i 就是等于二了,往下运行,进入到 y 循环当中。现在的 sales 阿行三列就是 sales 二行三列,那在这一行代码当中,未必一进行一个判断。 sales 二行三列是否等于空呢?我们来看一下二行三列。 sales 单个不等于空, 也就是说这样一个条件他是成立的,满足的可以进行循环,所以就进入了下面银行代码,进入累加气,累加完之后,也就是第一次循环结束了, 那么程序会再次的往上面再运行这里的挖油这行代码,再进行判断, sales 阿行三列是否等于空, 现在这里的 i 它仍然等于二,所以在判断的时候,这里仍然是 sales 二行三列,即这里的 sale 单元格,所以它判断出来 sale 单元格仍然不等于空,条件仍然是满足的,所以它又进行了循环,继续进行累加。 那么累加完之后,第二次循环结束,又回到了这里的 y 这行代码进行判断,仍然是二这个 i, 所以 cr 单格仍然不等于客户仍然满足条件,又进行循环, 就这样一圈一圈的循环出不来了,即条件永远满足,永远在循环,永远跳不出来循环,这样就形成了死循环,程序会卡死,所以说这样写代码还是有问题的, 那问题出在哪呢?就在这里,我们的 i, 我们的变量 i 永远等于二,他不能像放循环那样自动的给变量 i 复制成二,变成三,变成四,变成五等等。 所以我们在 y 循环结束之前,也就是在这里的 w i 的前面,我们要加上银行代码 i 等于 i 加一,根据上节课我们讲的,这里的 i 等于 i 加一,它也属于一个累加情况,那么 i 等于什么?就是说给这个 i 重新复制, 复制的方法就是把之前 i 再加上一个一,重新复制给 i, 那么我们重新看这个 y 循环,第一次循环这里的 i 等于二, 那么条件判断 sales 二行三列,也就是 sale 单格不等于空,条件是满足的,那么进行累加 s 等于 s, 加上 sales 二行三列,累加完之后,执行下面的银行代码 i 等于 i 加一,那么它也是一个累加的过程, 计算的过程。上节给我们讲过了,运行完这一行代码之后, i 就会变成三,也就是说第一次循环完之后,变量 i 由二变成了三, 那么现在这个 yo 循环,不知道这个条件是否还满足,那么再根据 yo 循环他的逻辑,第一遍循环之后,他会再进行一次条件判断,即又回到了 yo 这行代码,再进行判断, i 等于三,那么就是 sales 三行三列,也就这里的 c 三单元格, c 三单元格仍然不等于空,条件仍然是满足的,那么再进行下面这行代码累加气,进行累加,累加完之后,再运行这里的 i 等于 i 加一,也就是说第二次循环完之后, i 变成了四, 运行到了这里之后, y 循环,不知道是否还满足这个条件,所以他又回到了上面这行代码进行条件判断。 sales 四行三列是否等于空呢?一看这里的数据,四行三列是这里的 c 四的挨个仍然不等于空,仍然是满足的,那么再循环, 每循环一次 i 这个变量就会被加一,也就是每循环一次 i 的变量由二到三到四到五等等等等。 这样一圈一圈的循环完之后,当这个 i 变成这里的十五的时候,他再进行条件判断, c 二次十五行三列,一看 c 十五单元格仍然不等于空,还满足,他再循环 进行累加,然后再运行这里 i 等于二加一,那么 i 就会变成十六,变成十六之后,他又回到这一行, 再进行判断。 c 二次十六行三列,也就是这里的 c 十六单个是否等于空呢?一看等于空,我们的条件是不等于空,所以这个条件不满足了,那么他就会直接跳出循环, 直接运行这里的 sales 二行六列等于 s 这一行代码。好,这样分析完之后,我们发现未 多杯程序现在是可以的了,我们来测试一下。 好,我们点击计算本月累计这个按钮,点击一下,大家看结果出来了,没有问题,下面我们在下面累加两行,记录 我随便写 好,我们再点点击,大家看变化了就说。我们不需要每次计算本月累计出货量,都修改这里的代码,直接点击这个按钮即可完成计算。 好,这就是 while 循环,有关 while 循环,大家要记住三点,第一个 就是它的循环逻辑,它是通过判断这里的条件是否满足,从而进行循环的。第二点,它不会自动的给变量复制,所以希望我们在循环之前先给变量 i 进行复制。 大家注意负值的位置是变量 i, 在这个 y 循环这行代码前面就进行初始值的负值。 第三,他也不能自动的给变量重新复制,所以在循环里面我们还需要加上 i 等于 i 加一, 也就是变量等于变量它本身加上一就是重新给变量复制,也需要注意这里的位置是在循环结构里面写这行代码,具体说就是在这个 w i 的前面一行写这个代码,在实际工作中,这个 i 等于 i 加一是大家最容易忘记写的,所以要格外注意。 好,有关 while 循环这节课,我们就讲到这,感谢大家的观看,我们下节课再见。
