00:00
好,接下来我们来进入到我们下一个知识点啊,我们循环的嵌套啊,还是我来新建一个文件保存一下啊,我们一零叫做一个循环嵌套,呃,这个名字呢,一看就知道什么意思,所谓循环嵌套就是循环里边套循环,对吧?我在循环里边去套一个循环,那么问题就是我为什么需要做这个循环的嵌套,哎,我们这儿先举个例子啊,我们先来说一下,那现在我要求什么呢?诶要求诶在我们这个控制台中,诶来打印诶如下图形,什么图形呢?是这样一个啊,我先画一下吧,这是一个345个星号,然后我这复制复制啊井号不用开始注释,我们就看啊这个星号,那现在呢,我要求在我的控制台里给我打印一个这么一个五乘以五,由我们这个星号组成的一个矩形,啊,由星号组成一个矩形,那现在我们来看这个东西,我们要做,我要怎么做,哎,我们要看到这。
01:01
这了,那这玩意儿还不简单吗?五个星号呗,那我直接print,我来一个12345,这不就五个呀,哎,五个这一行就出来了,然后干嘛呀,12345,我再复制五次,然后这样一执行是不是就就出来了啊,就出来了,的确这非常简单,实际上就是什么呀?哎,Print语句执行五次就OK了啊执行五次就OK了,好,那现在问题来了,我现在是一个行高为五的矩形,那有可能我行高变了,我变成什么了?哎,我行高变成了十了,怎么办?行高变成十了,同学说那你直接复制一下不行吗?复制一遍这一执行是不是就是十了?诶,确实没问题,好,再说问题,现在我想打印行高为8848。那你是不是这个print得写8848次啊,所以很明显在这儿我用一个print,诶自己手动去复制是不是不现实啊,哎,不太好,那怎么办?那这种情况很明显,我们是不是应该用一个循环来控制,哎,如果你希望高是十,你就十次循环执行十次print,如果你希望高是20,就二次循环,是不是执行20次呀?哎,所以这里我们都删了,留一个这写什么呀?哎,注意我们来创建一个循环,哎,来控制我们这个图形的一个高度啊图形高度,那这里边我们来先来一个I等于零,初始化一个变量,然后这来一个while while呢,我这写了要执行几次,是不是I小于几啊,那我如果是五,那就是I小于五,然后把这个print放到这个while里边,那这样现在诶,当然还有一个什么呀,诶I加等于呀零,我们需要对I进行一个自增啊,对I进行自增,然后在这我们一保。
02:50
嗯,这个时候我们再看啊,一直行,哎,稍微等一下。哦,这又写错了,因为我A加等于零是不没写一样啊,哎哀加等于零没写一样,所以又变成了什么呀,死循环了啊,关掉我给它强强制关闭一下。
03:08
然后我们再打开啊,应该是什么呀?哎,应该是I加等于一啊,一定注意千万别写死循环啊,千万别死循环,这样我再一执行走一个是不就出来了,它的好处在哪?好处在我这如果想打高是15,就直接来一个15,走一个是不是高就15,你想高是20,就直接小于20,现在高就是什么呀,高就是20,看懂这意思吧,哎,所以这里边就是注意了,我们在这写的时候,我们的这个print打印的这个星号,它就是什么意思啊,哎,就是一个这个,哎。打印几个直行几个高就是几,所以我们这个循环就是来控制我们图形的一个什么呀,图形的一个高度啊,图形的一个高度,好,那接着再来看现在高度我们可以控制了,那宽度呢,现在宽度是五,我希望宽度是十,怎么办?我先把高度设置成五啊,高度现在变成五了,我现宽度是十怎么办?那同学说了,复制呗,现在是五个星号,诶,CTRLC直接复制,这已直行,哎,那现在是不是变成了十个型号,哎,变成型十个型号,那以此类推,你是不是想打几个你就可以给它复制几个呀?哎,复制几个,但是还是那个问题,我复制的确可以,但是在这个位置去复制是不是明显有一点点麻烦呀,哎,有点麻烦,那我有没有什么办法能让这个宽度也灵活一点呢?哎,宽度也灵活一点呢,我们还是改成五格的情况,那我们会发现我这儿打印了。
04:44
一行五个星号,那实际上是不是相当于我这个执行了五次呀?哎,相当于print执行五次,但家注意我如果这么写行吗?哎,注意这么写不行,我们来看效果,我这一执行走一个干嘛了?哎,是不是等于每一个都有换行了,哎每一个都有换行了,因为什么print每一行每输出一次,它会默认在后边输出一个这个杠N,也就是我们说的一个什么呀换行,所以会导致我如果连着写了五个print,会导致我们每一行是不是都有一个换行啊,那我要不想着换行怎么办?哎,我们可以在print的后边加一个东西啊,加一个参数,加一个参数来一个这个end等于一个空串,End等于空串什么效果就是告诉他别换行啊,别换行,我们这一保存,你会发现是不是就有不换行的了,哎,就有不换行的了,那这个时候我可以给每一个print都加上一个等于空串,那这样的效果就是导致我们的每一个print都不换行啊,都不换行,这样一保存一执行,诶是不是变成一行了,哎,每一个都不换行。
05:44
但是你每一个都不换行,我那个图形是不是又出不来了,哎,所以我们在最后调用一个空的这个print,我里边什么也不写,它就一个作用就是打印一个什么呀,换行啊,就是打印换行,那这样我们来看效果是不是跟刚才是一样的呀,哎,效果跟刚才是一样的好,看到这儿的同学就要嘀咕了,那老师你这么写不是麻烦了吗?之前我们就五个星就完了,这回你掉了五个print,然后还要整摁的,还要多加一个空的,比刚才那个是不是麻烦多了呀,哎,的确是有点麻烦,但是注意了,他有什么特点在这儿,他是不是在反复的执行这句话呀,这句话执行一遍宽度就是一,执行两遍宽度就是二,直行三遍宽度就是三,执行十遍宽度是不是就是十啊,哎,就说它执行几遍,它的宽度就是几,那我们现在就想了,诶,我能不能来创建一个循环来控制它执行的次数呢。
06:44
控制它执行的次数是不是也就是控制宽度,哎,所以在这里注意了,我们给它删掉,我可以干嘛呢?哎,在这儿我们来创建一个内层循环,创建一个内层循环,哎,来控制我们图形的一个宽度啊怎么写?那我这块已经用过L了,我这来一个J等于零,然后我来一个Y,来一个J小于五,我也执行五次循环,然后把这个print放到这个while里,那现在我们来看效果,注意啊,这个print print别往里放了,因为这个print我们是换行的,你放到里边是不是就跟他一块了,哎,等于每一每一个星号换一行,每一星号换一行了,那现在我们来看效果,我这一执行,哎呀,又忘了写什么了,又忘了写接加等于一了,哎,这块老是犯这种低级的错误,所以同学们,你看到我这么写了,你在开发的时候,在练习的时候,千万要注意写完。
07:44
那循环我们这个并更新表达式一定要写接加等于一啊,千万别忘啊,千万别忘,我们这一保存,我们一直行走一个是不是就是五个星号就完事了,那就完事了,那好处在哪啊,现在来看,我这想宽度为十了,我直接改成十,这一保存是不是宽度就十了,你想宽度是100,直接改成小于100,宽度是不是就是100了?哎,就这想,但是它自动换行了啊,自动换行是因为我们这个编器的问题,如果是在别的地方就不会换了啊,这是它的自动换行啊好,那这样我们就完事儿了啊,当然我们还是改成一个五啊,改成一五再来看效果,这就是一个五乘五的非常的灵活啊,非常灵活,当然这里边你会发现它的不太好,因为行距比较大,但是星号与星号之间距离是是比较小啊,那这个时候我可以买,诶我就加一个空格,这样再执行,诶这样是不是好看多了,哎,这样好看多了啊,那这样的好处就是什么?我们现在来看我的外层循环来控制我图形的一个高度,而我内层循环。
08:44
它是来控制图层的图形的一个什么呀?哎,宽度这1.1定要注意啊,一定要注意内层循环,外层循环控制高度,内层循环控制高度,诶宽度那问你了诶。我外层循环它一共会执行几次?
09:03
外层循环,外层循环是不是一共执行五次呀,哎,五次,而内层循环会执行几次,会执行几次?那注意了,我内层循环定义到了外层循环的内部,也就是说我的外层循环每执行一次,我的外内层循环是不是要执行一圈啊,一圈就是几次呀,五次啊五次,所以注意我们说了,我们的循环嵌套时,哎循环嵌套时我们外层循环每执行一次,哎,每执行一次我们的内层循环,哎就要什么呀,哎就要执行一圈啊注意我说的这一圈什么意思,就是说我外层循环是I等于零,从零开始,012345是吧,就执行这四啊,0234执行这五次,而我们这个内层循环先是01234执行一次,然后外层员又执行一次,它是不是还要01234再执行一次,哎,就说我们内层循环实。
10:03
想最终执行什么呀?哎,是外层循环的次数乘以内层循环次数是五乘以五,实行了什么呀?实际上是执行了25次啊,因为外层循环每执行一次,它就要执行一圈,那现在这你就这么记什么,怎么记啊,外层循环控制图形的高度,内层循环来控制图形的宽度,但是这个里边实际上我们用while循环写稍微有点麻烦,但是我们先用这种方式去写自己呢,先去体会一下啊,先去体会一下好处,就是让我们在打印这个图形的时候,是不是变得非常灵活呀,哎,非常灵活好,那现在我的需求变了,需求变了什么呢?之前我们是不是打印矩形了,这次我不打印矩形了,我打印什么呢?诶,第一行打印一个,第二行打印两个,第三行打印三个,然后四个,第五行打印五个,我现在要打的是一个三角形,要打的是一个三角形,那好我要看了,那这块我要怎么做来,我把这个。
11:03
先复制一下,然后给他住了,好,现在我来打印这个三角形,这个三角形我要怎么打,三角形我要怎么打。我们来看一下,那现在我们来说了,我要打印这三角形,我要问一下我现在图形的高度是多少?高度是五啊,因为有12345,那我问你我的外层循环用不用动不用动,因为高度是不是就是五啊,哎,就是五外层循环是不用动的,那再来看我的宽度呢?宽度这回就麻烦了,麻烦在哪呢?宽度第一行是一个信号,一个信号时候我接应该小于几?接是不是应该小于一啊,这样一直行是不是就一个型号诶当我第二行的时候,宽度是二,我应该小于几啊,小于二这一保存是不是宽度就变成二了,当我第三行的时候,宽度是三,我是不是应该就应该小于小于三了,哎,宽度就变成三了,那你会发现我这个接的值我能不能写死,我写一行不行,哎,我这一写一是不是就变成一个了,哎,我如果写二是不是变成一个两个的矩形了,我写三变成三个的矩形,我写四变成四个矩形,也就说这个值我一旦。
12:15
解死了就又变成矩形了,所以注意接小于的这个值我能不能写死,能不能写死?哎,必然是不能写死的,那这个值我应该是多少?哎,那我们来看第一行我们阶是什么呀?阶是结是应该小于一的,我们写一下啊,先分析问题的同学写一下,第一行应该是小于一,第二行应该是接小于二,第三行应该是接小于三,第四行应该是接小于四,然后第五行呢,应该是接小于五,也就是说它每一行小于那个数都是变的,12345是按顺序变的,那问题就是我们怎么能计算出12345这个数啊,12345这个数,那现在我问你了,当我这个内层循环在执行的时候,我的I的值是不是一样的?
13:07
哎,肯定不一样,因为什么?我第一次循环在打印第一行的时候,I的值是几?I的值是零,第二次是不是A加等于一啊,I变成了一,第三次变成了二,第四次变成了三,是不是最后一次变成了四,也就是说我第一次行的时候I是等于B的,第二次执行的时候I是等于二,AI是等于什么呀?第一次执是I等于零,第二次是I等于一,第三次执行的时候我们是I等于二,第四次执行的时候我是I等于三,然后第五次是不是I等于四,发现规律了吗?每一行每一行I的值是从零、一、二、三、四是不是顺序变化的?那我们发现接小于一的时候I是零,接小于二的时候I是一,你会发现它们的整个一个规律是什么?是不是就是阶在小于I加一呀?哎,当I等于零的时候,接小于1A加一是不是就是一啊,当I等于一的时候,接小于2A加一是不是就是二。
14:08
所以这个要改非常简单,把这个三改成一个I加一,这样我们这个值是不是根据每一行在变化,哎,再变化,我们先看效果啊,这样一直行走一个是不是就出来了啊,就出来这样一个图形,那现在的我们就打印了一个三角形,那注意我们整个外层循环是没有动的,为什么?因为我们这个图形是要改变的,是什么呀?是宽度,因为每一层的宽度在变,高度是没有变化的,所以外层循环不用动,我们只要去改这个值就OK了,这个值一变,图形的宽度自然而然就跟这。跟这变啊,就跟这变了,那这个就是我们说的一个这个嵌套的负循环,现在你做到这儿可能还体会不到它的作用,但是这个我们在开发里边会用的非常非常多,那你要知道它们的一个关系,外层循环每执行一次,内层循环就执行一圈,如果转换成图形的话,我们的外层循环是控制高度,而内层循环是控制宽度啊好,这个待会儿大家自己来写一下,然后呢,我们再来把这题变一下,嗯,我这个变完了,我先不写,你自己尝试分析一下,那我们之前是上边一个对吧,我倒过来上边五个,第二个四个,然后是三个,然后是两个,然后这是一个,同理,这个也是用不用改变高度,哎,高度是没变的,我们还是来修改什么呀,宽度,也就说这个值我要设成多少,如果这你们看懂了,这个应该也没问题啊,自己来分析一下,这个做完了,我们这有两个练。
15:44
底第一个打印九九乘法表,九九乘法表还记得吗?哎,我们来看一下九九乘表什么玩意儿,哎,先是一一得一对吧,一得一,然后是什么呀?诶一二得二,然后是二二得四对吧,然后是一三得三,然后是二三得六,然后是我们这个三三得九啊三得九啊,我就不再显摆了,是吧,我不显摆我会了,然后省略号,最后啊省略号诶我们这最后会有一个这个99821啊99821,这是不是就是一个中九九乘码表啊,那现在我要求你在我的命令行里边来打印出这样一个九九乘法表啊,九九乘法表那这东西怎么打,那这东西怎么,哎自己来尝试着去分析一下啊,这两个东西一个是打印一个这个三角倒过来,然后还有一个是打印九有乘法表,还有一个这个练习求100以内所有的质数,这个题跟我们之前那个练习四其实。
16:44
基本上是一样的啊,基本是一样的,这个你做会了,这个也没问题啊,自己来尝试一下,好,我们来听一下。
我来说两句