
4.3 循环
案例76 输出从1到10各个整数的平方根
导语
对一个数值进行开平方运算,可以调用math模块中的sqrt函数。此外,实现本案例可以使用while循环,设定一个变量i,初始化为1,当i的值不大于10时执行循环。在循环内部对i进行开平方运算并输出结果。每一轮循环完成时将i的值加上1。
while循环的格式如下:

只有当条件表达式成立时,循环体才会执行。每一轮循环后会重新检测条件表达式是否成立,如果成立就继续循环,否则退出循环。else子句是可选的,如果出现else语句块,当循环退出后会执行else语句块。但是,如果循环体内出现break语句,循环退出后不会执行else语句块。
操作流程
步骤1:导入math模块。

步骤2:初始化变量。

步骤3:进入循环代码,输出从1~10中(包含1和10)各个整数的平方根。

步骤4:运行案例代码,输出结果如下:

案例77 使用for循环
导语
for循环的一般格式为:

for关键字后面是变量列表,用于在每一轮循环中临时引用从迭代器对象中取出来的子项。in关键字之后可以是一个表达式列表,但这个表达式列表的运算结果要求是一个可迭代对象(iterable object)(例如元组、列表、字典等)。
else子句是可选的,如果存在,那么,代码流程会在for循环完成执行后执行else子句中的代码。但如果for循环体中出现break语句,则会跳出循环,并且else子句中的代码不会执行。
以下案例先产生一个由随机数组成的序列,然后再通过for循环逐个打印序列中的元素。
操作流程
步骤1:导入random模块。

步骤2:生成包含10个随机数的列表。

由于变量i的初始值为0,while循环只需在小于10的条件下运行就可以产生10个数值了,即取值范围为[0,9]。
步骤3:使用for循环,依次输出列表中的数值。

步骤4:运行案例代码,输出结果如下:

案例78 for循环与range函数
导语
for循环经常会与range函数一起使用。range函数可以产生一组有序的整数序列(等差数列)。
调用range函数并且只传递一个参数时,会生成从0~n-1的整数序列,序列中每一项与它的前一项的差为1。例如:

调用将产生整数序列:0、1、2、3、4。
下面的调用方式将产生序列2、4、6、8。

其格式为

start是起始值,stop为终值(产生的整数序列不包含终值),step是步长,默认为1,即每个数值与前一个数值之间的差。如果step为负值,那么start的值应该大于stop的值,才能生成递减的序列。
当for语句与range函数一起使用时,可以从range函数产生的整数序列中提取出各个元素,并进入循环,直到序列中的元素被完全枚举。例如:

上述代码中,range函数产生整数序列0、1、2、3、4。第一轮循环i的值为0,进入第二轮循环时i的值为1,第三轮循环时i的值为2……第五轮循环时i的值为4,执行完循环代码后就会退出for循环。
操作流程
步骤1:调用range函数产生0~6(不包含6)的整数序列,并用for循环将每个元素输出。

步骤2:输出从11~20(不包含20)的整数值,步长为2。

步骤3:输出从60向30(不包含30)递减的整数列表,步长为-5。

由于step参数(步长)为负值,因此,range函数产生的序列会从start(初值)向stop(终值)递减。
步骤4:运行案例代码,输出结果如下:

案例79 组成每个数位均不相同的三位数
导语
本案例要完成的功能是:使用整数1、2、3、4、5、6、7、8、9组成各个数位互不重复的三位数,并打印出所有符合要求的结果。以下数字都是不符合要求的:

222的百、十、个位上的数字都相同;113的百位和十位上的数字相同;155的十位和个位上的数字相同;636的百位和个位上的数字相同。
假设三个数位上的数字依次(从百位到个位)为a、b、c,根据以上对不符合要求的数字的分析,满足各个数位不重复的条件为

即a、b、c三个数值两两不相等。三个数值的取值范围都是[1,9],所以在代码流程上可以使用嵌套的for循环(共三个循环嵌套),而用于循环的序列则通过调用range函数产生。
操作流程
步骤1:声明一个空的列表对象,用来存放处理结果。

步骤2:进入三轮循环(嵌套),产生百、十、个位上互不重复的数字。

变量a乘以100后得到百位上的数字,变量b乘以10后得到十位上的数字,变量c位于个位上,不用处理,最后将它们进行相加就能得到三位数了。还有一种方法,就是把a、b、c三个变量都转换为字符串类型,再连接起来形成三位数,即

步骤3:将产生的三位数数字列表输出到屏幕上。

变量c用来计算输出元素的个数,在打印出元素值后,进行换行处理——每输出八个元素换一行。
步骤4:运行案例代码,屏幕输出结果如下:


案例80 求“水仙花数”
导语
“水仙花数”是三位数,其特点是它每个位上面的数的三次方之和等于其自身。例如,371=33+73+13。
本案例可以运用range函数生成100~999的整数序列,然后通过for循环进行逐个验证。在验证时需要分别提取出百、十、个位上的数值,然后计算它们的三次方之和,最后检查结果是否与原数相等。
操作流程
步骤1:生成整数序列。

步骤2:声明一个空白的列表对象,用于存放处理结果。

步骤3:使用for循环对整数序列中的元素进行逐个验证。

运算符∗∗执行指数运算,a∗∗3表示求变量a的三次方。
步骤4:打印处理结果。

步骤5:运行程序后,屏幕输出如下内容:

案例81 跳出循环
导语
在循环代码中使用break语句,可以立刻跳出循环。另外,还有一个功能类似的语句——continue,continue语句执行后不会跳出循环,只是跳过当前代码执行下一轮循环而已;而break语句会结束整个循环。
本案例的功能是:随机产生七个整数,然后对这七个数字进行逐个分析,只要遇到一个可以被15整除的数字,任务结束。
操作流程
步骤1:从random模块中导入randint函数。

步骤2:随机生成七个整数,保存在一个列表对象中。

步骤3:通过循环来查找可以被15整除的数字,只要找到一个就马上终止循环。

步骤4:运行案例代码,会得到如下结果:

注意:由于整数列表是随机生成的,有可能会出现七个数中没有一个能被15整除的情况,只要多运行几次就能产生能被15整除的数字。