Python入门很轻松(微课超值版)
上QQ阅读APP看书,第一时间看更新

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的程序运行结果