美文网首页
嵌套与可变循环 ——父与子的编程之旅 学习笔记(9)2018-0

嵌套与可变循环 ——父与子的编程之旅 学习笔记(9)2018-0

作者: HelloFloria | 来源:发表于2018-07-16 11:37 被阅读0次

第十一章 嵌套与可变循环

我们在之前的猜数字以及其他程序中,都可以发现:循环中可以放入其他代码块(不一定是循环,只要是能实现功能的代码块都可以),这种“一环套一环”的循环,我们称它为嵌套循环(nested loop)。

红色框中的就是嵌套的部分

11.1 嵌套循环

之前我们写过自动打印乘法表的代码,要想一次打印三个乘法表,需要运行三次:

红线这里是非循环语句,所以不能省事儿

现在我们想要一次性打印三个乘法表,只需要将原来的循环(打印一个表),嵌套到一个外循环中(重复运行3次)。这样,一次就可以打印三次:

print i这里,在python3会报错,所以接下来的还是在python2中运行 生成结果

11.2 可变循环

在谈“可变”之前,我们先看看“不变”:

不变的数,也就是固定的数。在python中,我们将固定不变的数叫做“常数”。

同样的,一个程序被限定运行的次数,这样的循环,我们称之为“硬编码的(hard-coded)”,因为代码被定义了,并且永远不会改变——这是不会变通的代码。

有时候,我们需要代码自己会变通。这可能是需要用户定义循环次数,或是在游戏中,根据用户的行为,代码自己判断需要循环多少次。

下面是一个简单的,使用可变循环画星星的程序:

1开头的话,要加1;0开头的话就不用 假如print后面加了逗号,这些星星会连在一起

11.3 可变嵌套循环

现在我们试试将“嵌套”和“可变”加起来理解:其实它就是一个嵌套循环,其中一个或多个循环,使用了range函数等变量。

下面是其中一个可变嵌套循环的例子:

(1)请求用户输入行数,以30行为例;

(2)请求用户输入每行的星星数,以5为例;

(3)外循环:打印行数(在这里重复30次)

(4)内循环:打印星星数(在这里重复5次)

代码 输出结果

另外,我们还可以有更多重的循环,以下面的三重循环为例:

依样画葫芦,加了询问block和最外的外循环 结果

11.4 更多的可变嵌套循环

下面是画星星的更复杂的版本:

这里不能用0开头,因为考虑到算式,所以0和1开头需要灵活运用 输出结果(部分)

有时候,打印出循环变量会对我们有帮助(例如帮助我们调试程序):

在print后添加了三个变量值 输出

11.5 使用嵌套循环

嵌套循环一个很重要的应用,是帮我们找出所有可能的排列和组合。

例如:赛百味有售热狗,我想知道所有热狗、小面包、芥末酱和番茄酱的搭配,一共有多少种可能。

我们可以有很多种方法解决问题,一种比较好的方法是画决策树(decision tree),感兴趣的可以在这里详细了解;现在,我们可以在程序中,将决策树表达出来。为了方便编写程序,我们使用0代表“有”,1代表“没有”。

以下是一个五层的嵌套循环:

(1)热狗循环(外循环):运行两次(因为只有0,1两种选项)。

(2)对热狗循环的每一次迭代,小面包循环都运行2次,因此一共运行2*2=4次。

(3)对小面包循环的每一次迭代,番茄酱循环都运行2次,因此一共运行2*2*2=8次…

以此类推,最内层循环(洋葱循环)一共运行了2的5次方,也就是32次。

另外,下面我们用了“\t”这个制表符,让程序显得更美观。

程序 运行结果

当然,这个程序有些运行结果显得没意义,但换一种目的,却会是非常有实际价值。

卡路里计算器

现在,我们将每部分食物附上卡路里值:

需要注意的是,加上卡路里这一个变量,并不只是打几个字那么简单:

(1)红色圈,注意将卡路里加上表头;

(2)蓝色圈,onion并不是最后一个变量,所以需要加上逗号,连接后面的卡路里;

(3)最后注意将卡路里print出来。

多次试错后的代码,注意total_cal后面的斜杠用以表示长代码 运行结果

学到的东西

(1)嵌套循环

(2)可变循环

(3)排列、组合

(4)决策树


练习

(1)使用可变循环修改第八章的倒计时程序:

(2)在第一题基础上,打出对应的星号:


小结

这章也是比较难,继续在以后的练习中掌握吧!

相关文章

网友评论

      本文标题:嵌套与可变循环 ——父与子的编程之旅 学习笔记(9)2018-0

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