Python机器学习
上QQ阅读APP看书,第一时间看更新

2.4 循环结构

循环结构用来重复执行一条或多条语句,使用循环语句结构可以减少程序的重复书写工作。Python提供了for循环和while循环。

2.4.1 可迭代对象

可迭代对象(iterable)是指执行一次可返回一个元素的对象,它适用于循环。Python中包含的可迭代对象主要有:序列对象(sequence),例如,字符串(str)、列表(list)、元组(tuple),字典(dict),文件对象(file),迭代器对象(iterator),生成器函数(generator)等。

迭代器是一个对象,表示可迭代的数据集合,包括方法__iter__()和__next__(),可以实现迭代功能。生成器是一个函数,使用yield语句,每次产生一个值,也可以用于循环迭代。

Python 3.7中的内置对象range是一个迭代器对象,在迭代时产生指定范围的数字序列。range的格式如下:

range对象返回的数字序列范围是[start, stop),从start开始,到stop结束(不包含stop),默认每次迭代步长值为1,如果指定了可选的步长值step,则序列按步长step值增长。例如:

运行结果如下:

2.4.2 循环语句

1.while循环语句

while语句用于循环执行某段程序,即在某条件成立(为真)下,循环执行某段程序,以重复处理相同的任务。

while循环语句的语法格式如下:

或:

while语句的流程图如图2-5所示。while语句中的判断条件可以是任何表达式,任何非零或非空的值均为真(True),在循环语句序列中至少应包含改变循环判断条件的语句,以使循环执行趋于结束,避免无限循环(“死循环”)。

while循环语句的执行过程如下。

1)执行到while语句,计算其后跟着的判断条件。

2)如果判断条件结果为True,则进入循环体执行,当执行到循环体语句序列结束点时返回1)继续执行。

3)如果判断条件结果为False,则结束while循环的执行,转到while语句的后继语句执行。

图2-5 while语句的流程图

【例2-6】编写程序,利用while循环求1~100的和、1~100中所有奇数的和,以及1~100中所有的偶数和,并输出。

参考程序如下:

程序运行结果如下:

2.for循环语句

for语句用于遍历可迭代对象集合中的元素,并对集合中的每个元素执行一次相关的操作。当集合中的所有元素完成迭代后,for循环将程序控制传递给for循环之后的下一条语句。

for循环语句的语法格式如下:

for循环语句的流程图如图2-6所示。

图2-6 for循环语句的流程图

for循环语句的执行过程如下。

1)执行到for语句,判断循环索引值是否在序列中。

2)如果该值在序列中,则取出该值,进入循环体执行,循环体执行结束时返回1)继续执行。

3)如果该值不在序列中,则结束for循环的执行,转到for循环后面的语句执行。

【例2-7】编写程序,利用for循环求1~100的和、1~100中所有奇数的和,以及1~100中所有偶数的和,并输出。

参考程序如下:

程序运行结果如下:

2.4.3 循环控制语句

循环控制语句可以改变语句执行的顺序。Python支持break和continue循环控制语句。

1.break语句

break语句的格式如下:

break语句可以用在while和for循环中,用于提前结束break语句所在的循环,即退出所在循环的执行。例如,在执行循环的过程中,如果某个条件得到了满足,则可以通过break语句立即终止所在循环的执行。当多个for或while循环彼此嵌套时,break语句只结束所在层次的循环,例如,如果break在两层循环嵌套的内层循环中,则只终止内层循环,进入外层循环的下一条语句继续执行。

【例2-8】编写程序,利用break语句实现从键盘输入若干整数,输入0结束,统计其中正数和负数的个数,并输出。

参考程序如下:

程序运行结果如下:

2.continue语句

continue语句的格式如下:

continue语句与break语句类似,也用于while和for循环中。在循环执行体执行的过程中,如果遇到continue语句,则程序结束本次循环,即程序会跳出本次循环的循环体,回到循环开始的地方重新判断是否进入下一次循环。

【例2-9】编写程序,利用continue语句实现输出1~100之间所有不能被3整除的数,每行输出10个。

参考程序如下:

程序运行结果如下:

2.4.4 循环结构程序举例

【例2-10】编写程序,查出[100,1000]以内的全部素数,并输出。

分析:查找全部素数的过程可分为以下两个步骤。

1)判断一个数是否为素数。

2)将判断一个数是否为素数的程序段,对指定范围内的每一个数都执行一遍,即可求出某个范围内的全部素数。即首先依据题目的部分条件确定答案的大致范围,然后对此范围内所有可能出现的情况一一验证,直到全部验证完毕。若某个情况经验证符合题目的全部条件,则为本题答案;若全部情况经验证均不符合题目的全部条件,则本题无解。

参考程序如下:

程序运行结果如下:

【例2-11】编写程序,实现百钱买百鸡的问题。已知公鸡每只5元,母鸡每只3元,小鸡一元3只。要求用100元钱正好买100只鸡,问公鸡、母鸡、小鸡各多少只?

分析:此问题也可以用穷举法求解。公鸡、母鸡、小鸡数分别为x、y、z,则根据题意能列出方程组:

使用多重循环组合出各种可能的xyz值,然后进行测试。

参考程序如下:

程序运行结果如下:

【例2-12】编写程序,输出九九乘法表。

参考程序如下:

程序运行结果如下: