3.4 循环控制语句
微视频
循环控制语句主要是在满足条件的情况下反复执行某一个操作。循环控制语句主要包括while语句和for语句。
3.4.1 while语句
while语句是循环语句,也是条件判断语句。
while语句的语法格式如下:
while 判断条件: 语句
这里同样需要注意冒号和缩进。
【例3.7】使用while循环语句分析输入的5位数是不是回文数(源代码\ch03\3.7.py)。
一个5位数,判断它是不是回文数。例如,12321是回文数,个位与万位相同,十位与千位相同。
n=input("请输入需要判断的5位数:") a=0 b=len(n)-1 flag=True while a<b: if n[a]!=n[b]: print("您输入的数不是回文数") flag=False break a,b=a+1,b-1 if flag: print("您输入的数是回文数")
程序运行结果如图3-11所示。
图3-11 例3.7的程序运行结果
使用while循环语句时,如果没有特殊要求,尽量避免出现无限循环的情况。例如,下面的例子,求1~100的和,代码如下:
a = 100 sum = 0 b = 1 while b <= a: sum = sum + b b += 1 print("1 到 %d 之和为: %d" % (a,sum))
如果在这里遗漏代码行b+= 1,程序就会进入无限循环中。因为变量b的初始值为1,并且会发生变化,所以b <= a始终为True,导致while循环不会停止。
☆经验之谈☆
要避免无限循环的问题,就必须对每个while循环进行测试,确保其会按预期的那样结束。如果希望程序在用户输入特定值时结束,那么可运行程序并输入这样的值;如果在这种情况下程序没有结束,那么请检查程序处理这个值的方式,确认程序至少有一个这样的地方能让循环条件变为False,或者让break语句得以执行。
如果条件表达式一直为True,while循环就会进入无限循环中。无限循环应用也比较广泛,如在服务器上处理客户端的实时请求时就非常有用。
【例3.8】while无限循环的应用(源代码\ch03\3.8.py)。
ff = "水果" while ff=="水果" : #表达式永远为 True name =str (input("请输入需要购买水果的名称:")) print ("你输入的水果名称是: ", name) print ("水果购买完毕!")
程序运行结果如图3-12所示。
图3-12 例3.8的程序运行结果
如果用户想退出无限循环,可以按Ctrl+C组合键。
当while循环体中只有一条语句时,可以将该语句与while写在同一行中。例如:
ff = "水果" while ff=="水果" : print ("我最喜欢吃的水果是葡萄") print ("水果购买完毕!")
while语句可以和else配合使用,表示当while语句的条件表达式为False时,执行else的语句块。
【例3.9】while语句和else配合使用(源代码\ch03\3.9.py)。
n =int (input("请输入一个整数:")) x=1 while x <n: print (x, "小于n") x=x+1 else: print ("小于n的整数查找完毕!")
程序运行结果如图3-13所示。
图3-13 例3.9的程序运行结果
3.4.2 for语句
for语句通常由条件控制和循环两部分组成。
for语句的语法格式如下:
for <variable> in <sequence>: 语句 else: 语句
其中,<variable>是一个变量名称;<sequence>是一个列表。else语句运行的时机是当for语句都没有运行,或者最后一个循环已经运行时。else语句是可以省略的。
【例3.10】分析数字1、2和3,能组成多少个互不相同且无重复数字的3位数(源代码\ch03\3.10.py)。
这里使用range()函数遍历数字1、2、3,然后使用for循环输出所有的组合数字,最重要的是要把重复的数字去掉。
tm=0 for i in range(1,4): #range()函数遍历数字1、2、3 for j in range(1,4): #使用for 循环输出所有的组合数字 for k in range(1,4): if ((i!=j)and(j!=k)and(k!=i)): #把重复的数字去掉 print(i,j,k) tm+=1 print('总共组合了' ,tm, '个数字')
程序运行结果如图3-14所示。
图3-14 例3.10的程序运行结果
若想跳出循环,则可以使用break语句。该语句用于跳出当前循环体。
【例3.11】for语句和break语句的综合应用(源代码\ch03\3.11.py)。
下面的例子是实现快速搜索到人名为间谍的人,然后跳出循环。
name = ["小明", "张三","李四","王五","间谍","小雨"] for n in name: if n == "间谍": print("找到名字为间谍的人啦!") break print(n) else: print("没有发现名字为间谍的人!") print("人名搜索完毕!")
程序运行结果如图3-15所示。从结果可以看出,当搜索到“间谍”时,会跳出当前循环,对应的循环else块将不执行。
图3-15 例3.11的程序运行结果
3.4.3 continue语句和else语句
使用continue语句,Python将跳过当前循环块中的剩余语句,继续进行下一轮循环。
【例3.12】while语句和continue语句的配合使用(源代码\ch03\3.12.py)。
此例主要输出以10开始递减的整数,并且递减间隔为2,最小数为0。
a = 10 while a >0: a=a-2 if a==6: #变量为6时跳过输出 continue print (a, " 大于或等于0")
程序运行结果如图3-16所示。从结果可以看出,当变量为6时,将跳出当前循环,进入下一个循环。
图3-16 例3.12的程序运行结果
当for循环被执行完毕或while循环条件为False时,else语句才会被执行。需要特别注意的是,如果循环被break语句终止,那么else语句不会被执行。
【例3.13】for、break和else语句的配合使用(源代码\ch03\3.13.py)。
a= "万树鸣蝉隔岸虹,乐游原上有西风。" for b in a: #包含break 语句 if b== '乐': #文字为“乐”时跳过输出 print ('当前文字是:', aa) break else: print ('没有发现对应的文字')
程序运行结果如图3-17所示。从结果可以看出,当搜索到文字“乐”时,将通过break语句跳出循环。
图3-17 例3.13的程序运行结果
3.4.4 pass语句
pass是空语句,主要为了保持程序结构的完整性。pass不做任何事情,一般用作占位语句。
【例3.14】for和pass语句的配合使用(源代码\ch03\3.14.py)。
for a in '羲和自趁虞泉宿,不放斜阳更向东。': if a == '不': pass print ('执行pass 语句') print ('当前文字:' a) print ("搜索完毕!")
程序运行结果如图3-18所示。从结果可以看出,当搜索到文字“不”时,先执行print ('执行pass语句'),然后执行print ('当前文字:', a)。
图3-18 例3.14的程序运行结果