美文网首页
循环就像转圈圈——父与子的编程之旅 学习笔记(6)2018-07

循环就像转圈圈——父与子的编程之旅 学习笔记(6)2018-07

作者: HelloFloria | 来源:发表于2018-07-13 23:51 被阅读0次

    第八章:转圈圈

    计算机程序通常会周而复始地重复同样的步骤,这叫做循环(looping)。循环主要分两类:

    (1)计数循环(for):重复一定次数的循环

    (2)条件循环(while):重复至某种情况时结束(只要条件为真,就会一直循环下去)

    [注意:假如在调试循环的时候有bug,试试用ctrl+c停止]

    8.1 计数循环

    一个最简单的循环,for..in [循环体] 循环结果

    注意:一次循环就叫做迭代(iteration)。

    另外,上面print的是hello,looper这个变量只是充当“计数”这个角色;但是当我们print出looper本身,会是什么样?

    跟上次不一样,print的是looper这个变量 可以看到,后面的循环体的每个值,都赋值给了looper

    因此,复习一下python计数循环的格式:

    for  + 变量名 + in + [ 值1,值2,值3,...] +:

    (千万不要忘了后面的冒号!)

    需要注意的是,这里中括号和逗号的作用是组成“列表”。

    列表这个概念,大概可以先理解为“容器”,用来存放东西;在循环这里,就是存放数值,等用到的时候拿出来用。(列表在第十二章会详细讲。)

    8.2 使用计数循环

    现在来一个高级点的任务:打印乘法表。

    (我仿佛还记得被九九乘法表支配的恐惧……)

    1*9的算法 做出来了,挺简单

    我想挑战一下九九乘法表,后来发现需要另一方面的知识,就先不展开讲了。

    8.3 一条捷径——range()

    上面我们要乘1-5,如果要乘1-1000,或1-10000呢?

    这个时候,我们需要用到range函数。它相当于一条桥梁,只要告诉python前、后是什么,它就能圈好范围、自动将中间的数转化为值以进行循环。

    现在写一个简单的、利用range函数乘大数程序:

    事实上到第二个的时候,程序仿佛是停不下来了 在这里的时候,我用了ctrl+c来停止

    需要注意的是,range(1,5)包含的是1,2,3,4这四个数,5是不包含在内的。这点非常重要,所以在使用range函数的时候,需要十分注意最后一个数的结束点。

    注意range的范围 range的范围要减一,just like this

    8.4 风格问题——循环变量名

    循环变量名没有特殊之处,它就是一个名字而已,但避免跟其他变量混淆,通常给循环变量取名,还是有些讲究的。这些讲究,是为了更易懂、更易于理解,也更易于调试,最终都是更易于合作。

    譬如说,用looper这样有实际含义的名字,或是用i,j,k等作为循环变量(这里还有段故事,可以自己百度),通常会比较好。

    range()的简写

    for i in range ( 5 )

    for i in range ( 0, 5 )

    是完全一样的,它们包含的数值,都是0,1,2,3,4(没有5!)

    你可以发现:为什么会从0开始?

    这是习惯问题,就算是以前,也是大把程序员在争论range到底是从0还是从1开始。可以说,无论是0还是1开始,只要确定好界限,保证结果正确,都是可以的。

    另外再看看这个“循环字符”的函数:

    跟前面不同,循环体变成了字符

    结果会是什么呢?

    并不是循环多次,而是变成了“竖式”

    会变成“竖式”是因为字符串的性质。字符串就像是一个字符的列表,每个位置都放了一个字符。而for.. in.. 这个计数循环,是使用列表来完成迭代的,所以上面的代码,表示的是“将字符串里面的每一个字符循环一次”,而循环一次就需要print一次,print函数都需要另起一行,所以最后的结果就像“竖式”啦!

    8.5 按步长计数

    目前为止,我们学习的都是增量为1的循环,也就是“向前走一步”;那我们可不可以调整一下增量,向前走五步、十步,甚至后退呢?

    当然可以!秘诀就在给range函数设置一个额外的参数(argument),利用这个参数,我们可以将默认的增量1,改为不同的值:

    注:参数有时候也称“形参”,在第十三章会有更多介绍。

    参数就是后头这个,表示“步长”

    接下来我们看两个代码:

    首先看从1开始数的计数循环函数 输出的是这个东西,所以说建议开头从0开始,会比较不容易出错 接下来是从0开始的 就正确了!

    接下来我们在做一个反向计数:

    简单是简单,但还不够严谨,中间应为-101 否则就没有了最后的-100

    总之,一定要记住,range函数的第二个数,是永远不能到达的。

    接下来,试着在函数中添加一些效果,如:

    倒计时:加入了时间函数,隔一秒再显示

    8.6 没有数字的计数

    结合前面循环输出字符串,我们知道:循环的不一定是数字,也可以是字符串或其他。

    为了验证这个结论,运行下面这个代码,看看会发生什么?

    有些小错误后来改了 运行结果

    这儿的循环,是处理一个字符串列表,由python自行统计列表中要循环多少次。

    但如果无法提前预知要迭代多少次呢?

    8.7 无法预知的情况

    之前我们用的都是for循环(计数循环)——当我们知道要循环多少次的时候,用for循环是最合适的。

    但当我们只知道结束条件、不能确定具体要运行多少次的时候,for就不合适,而适合用while循环(条件循环)了。

    使用了while循环,只要输入为3,条件就一直为真,程序就会一直运行下去 退出时输入了个空格,输入不为3,因此退出

    8.8 跳出循环——break和continue

    (1)跳过这个不循环:continue

    有时候我们需要在循环中间退出,也就是在for循环结束计数前,或者在while循环找到结果前。

    下面来看运行结果:

    注意continue语句,让i=3这里的循环体没完成,而是提前跳到了下一句

    (2)完全跳出循环:break

    就跟小标题一样,break是会让后面的循环都终止,直接结束。

    有人认为break和continue的语句不好用,书本作者平时也很少用,不过确实有必要在学习的时候知道这两句语句的作用。


    你学到了什么?

    在这一章,我们学习了以下内容:

    (1)for 循环——计数循环

    (2)while循环——条件循环

    (3)range函数:计算循环的捷径

    (4)range函数的步长:第三个参数

    (5)用continue语句跳到下一次迭代

    (6)用break语句跳出循环


    动手试一试

    (1)编写一个程序,显示一个乘法表。开始时询问用户想显示哪个数的乘法表。

    原以为很简单,结果莫名栽倒:

    结果是:

    尝试了用两个multiplier乘在一起,试错,果然知道了错误原因:

    果然是字符串没转化的问题

    把rawinput的类型强制转换:

    便得到了正确的结果。

    (2)将第二题用另一种循环表示出来:

    一开始,将for中的range函数强行加在while函数中,结果编不出任何东西:

    接下来翻答案,才知道用到while函数的时候,要先设置looper为1,接下来在每次迭代中+1,才算是记上一次数:

    上面是错误结果,下面是正确的运行结果:

    (3)向乘法表在添加一个input,让用户能自己决定乘数和最大乘到几(建议for和while都试试):

    for循环,range函数末尾要记得加1 while循环也是要记得末尾加1

    运行结果:

    最后的乘数出来啦~

    小结

    这一章主要是回顾了之前一直弄不懂的循环,其实理解了它们的原理、通过不同难度和层次的练习,小孩子真的也能够轻松学会。

    接下来会继续探索算法!

    相关文章

      网友评论

          本文标题:循环就像转圈圈——父与子的编程之旅 学习笔记(6)2018-07

          本文链接:https://www.haomeiwen.com/subject/eoqlpftx.html