Python控制语句四

三、循环的嵌套

循环语句的语句块中可以包含另一个循环语句,这种结构称作二重循环,同样包含在语句块中的循环,它的语句块中也可以继续包含循环语句,从而可以形成三重循环,甚至是多重循环。

下面我们先分析一个小程序:

for i in

range(0,10):

print("*",end="")

从前面的学习不难看出此程序的功能是显示十个星号。

变量i分别从1取值到10,i每取一个值,循环中的语句块都执行一次,共执行了十次,每执行一次都会输出一个不换行的星号。

如果我们将上面的语句作为一个语句块,放置到另一个循环中当作该循环的语句块,即如下所示。


运行后会发现程序输出了五十个星号,这是因为蓝色语句块的功能是输出十个星号,而蓝色语句恰是外部循环的语句块,而外部循环共循环五次,所以蓝色语句块被执行了五次,每次输出十个星号,所以共输出五十个星号。

输出如下图所示。


如果我们在蓝色语句块后面再添加一条换行语句:print(""),则程序如下图所示。


执行结果如下图所示。


经上面修改后,蓝色语句块由两条语句构成,循环语句输出十个星号,另一条语句输出换行符号。这样在外层循环循环五次时,就形成了五行星号。

从上面分析可知,当循环中嵌套循环时,外层循环每执行一次循环,则内层循环都完成全部循环,然后外层循环进行第二次循环时,内层循环又要完全循环一次,因此整个循环的次数是两层循环次数的乘积。

上例中,如果我们将蓝色语句块中的range(0,10)改为range(0.n),参见下图红线标识


则程序运行的结果如下图所示。


这是因为蓝色语句块中的循环语句的循环次数由外层循环中的变量决定,内层循环由原来的循环十次,变成了循环n次,而外层循环控制着n的值,n的取值分别是1,2,3,4,5,所以蓝色语句块每次执行时显示的星号数也分别是1,2,3,4,5,所以输出的各行的星号都不同。

【例题1】分析下列程序的输出结果。

for i in

range(1,6):

for j in rang(1,6):

print(i,j," ",end="")

print("")

分析 :外层循环的i变量取值分别为1,2,3,4,5 ,内层循环变量j的取值也是1,2,3,4,5,当外层循环进行第一次循环时,i=1,此时内层循环要完成j从1至5的一轮循环,所以j从1-5的过程中i始终是1,print语句输出五次i,j的值,于是输出了下面的第一行数据:

内层的第一轮循环结束后,执行最后的换行语句,整个语句块结束,所以又返回外层循环,外层循环进入第二次循环时j取值2,内层循环还是j从1变到5,于是就形成了下面的第二行数据。依此类推,就得到了下面的输出结果。


从该题的运行结果不难看出,外层循环的变量每取一个值,内层循环都要循环一轮,等到内层循环完成一轮循环,外层循环才进入第二次循环……。

【例题2】编写程序输出如下的乘法九九表


分析:每行两个相乘的数具有如下特点,第二个数不变,第一个数从1变到9,每行都是如此,只是相乘的第二数逐列增加1,所以我们可以用双层循环,输出的顺序是内层循环变量、外层循环变量、二者的乘积,程序如下:


如果要输入以下格式的乘法九九表,则只要将程序稍做修改即可。


修改后的程序如下图红框处所示:


【例题3】假设卖出一件单衣赚100元,卖出一件棉衣赚200元,卖出一双皮鞋赚500元,问若要赚1000元,各种商品有几种不同的销售情况。

分析:若卖出的都是皮鞋,则只需卖出两件商品即可,

若卖出的都是棉衣,则只需卖出5件商品

若卖出的都是单衣,则需卖出10件商品,

设单衣数量为x,棉衣数量为y,皮鞋数量为z,则x的范围是0-10,y的范围是0-5,设z代表皮鞋,则z 的变化范围为0-2 我们通过三重循环一个一个数的尝试,用if语句进行筛选,只输出满足条件的组合,把各种商品销售的所有可能性都组合出来,可写出程序如下:

for x in

range(0,11):

for y in range(0,6):

for z in range(0,3):

if x*100+y*200+z*500==1000:

print(x,"件单衣",y,"件棉衣",z,"双皮鞋")

程序运行结果如下图所示:列出销售情况恰都是盈利为1000元。