官术网_书友最值得收藏!

3.4 循環(huán)控制語句

微視頻

循環(huán)控制語句主要是在滿足條件的情況下反復(fù)執(zhí)行某一個操作。循環(huán)控制語句主要包括while語句和for語句。

3.4.1 while語句

while語句是循環(huán)語句,也是條件判斷語句。

while語句的語法格式如下:

    while 判斷條件:
        語句

這里同樣需要注意冒號和縮進。

【例3.7】使用while循環(huán)語句分析輸入的5位數(shù)是不是回文數(shù)(源代碼\ch03\3.7.py)。

一個5位數(shù),判斷它是不是回文數(shù)。例如,12321是回文數(shù),個位與萬位相同,十位與千位相同。

    n=input("請輸入需要判斷的5位數(shù):")
    a=0
    b=len(n)-1
    flag=True
    while a<b:
       if n[a]!=n[b]:
          print("您輸入的數(shù)不是回文數(shù)")
          flag=False
          break
       a,b=a+1,b-1
    if flag:
       print("您輸入的數(shù)是回文數(shù)")

程序運行結(jié)果如圖3-11所示。

圖3-11 例3.7的程序運行結(jié)果

使用while循環(huán)語句時,如果沒有特殊要求,盡量避免出現(xiàn)無限循環(huán)的情況。例如,下面的例子,求1~100的和,代碼如下:

    a = 100
    sum = 0
    b = 1
    while b <= a:
       sum = sum + b
       b += 1
    print("1  到 %d 之和為: %d" % (a,sum))

如果在這里遺漏代碼行b+= 1,程序就會進入無限循環(huán)中。因為變量b的初始值為1,并且會發(fā)生變化,所以b <= a始終為True,導(dǎo)致while循環(huán)不會停止。

經(jīng)驗之談

要避免無限循環(huán)的問題,就必須對每個while循環(huán)進行測試,確保其會按預(yù)期的那樣結(jié)束。如果希望程序在用戶輸入特定值時結(jié)束,那么可運行程序并輸入這樣的值;如果在這種情況下程序沒有結(jié)束,那么請檢查程序處理這個值的方式,確認(rèn)程序至少有一個這樣的地方能讓循環(huán)條件變?yōu)镕alse,或者讓break語句得以執(zhí)行。

如果條件表達(dá)式一直為True,while循環(huán)就會進入無限循環(huán)中。無限循環(huán)應(yīng)用也比較廣泛,如在服務(wù)器上處理客戶端的實時請求時就非常有用。

【例3.8】while無限循環(huán)的應(yīng)用(源代碼\ch03\3.8.py)。

    ff = "水果"
    while ff=="水果" :              #表達(dá)式永遠(yuǎn)為 True
      name =str (input("請輸入需要購買水果的名稱:"))
      print ("你輸入的水果名稱是: ", name)
    print ("水果購買完畢!")

程序運行結(jié)果如圖3-12所示。

圖3-12 例3.8的程序運行結(jié)果

如果用戶想退出無限循環(huán),可以按Ctrl+C組合鍵。

當(dāng)while循環(huán)體中只有一條語句時,可以將該語句與while寫在同一行中。例如:

    ff = "水果"
    while ff=="水果" : print ("我最喜歡吃的水果是葡萄")
    print ("水果購買完畢!")

while語句可以和else配合使用,表示當(dāng)while語句的條件表達(dá)式為False時,執(zhí)行else的語句塊。

【例3.9】while語句和else配合使用(源代碼\ch03\3.9.py)。

    n =int (input("請輸入一個整數(shù):"))
    x=1
    while x <n:
      print (x, "小于n")
      x=x+1
    else:
      print ("小于n的整數(shù)查找完畢!")

程序運行結(jié)果如圖3-13所示。

圖3-13 例3.9的程序運行結(jié)果

3.4.2 for語句

for語句通常由條件控制和循環(huán)兩部分組成。

for語句的語法格式如下:

    for <variable> in <sequence>:
       語句
    else:
       語句

其中,<variable>是一個變量名稱;<sequence>是一個列表。else語句運行的時機是當(dāng)for語句都沒有運行,或者最后一個循環(huán)已經(jīng)運行時。else語句是可以省略的。

【例3.10】分析數(shù)字1、2和3,能組成多少個互不相同且無重復(fù)數(shù)字的3位數(shù)(源代碼\ch03\3.10.py)。

這里使用range()函數(shù)遍歷數(shù)字1、2、3,然后使用for循環(huán)輸出所有的組合數(shù)字,最重要的是要把重復(fù)的數(shù)字去掉。

    tm=0
    for i in range(1,4):                        #range()函數(shù)遍歷數(shù)字1、2、3
        for j in range(1,4):                    #使用for 循環(huán)輸出所有的組合數(shù)字
            for k in range(1,4):
                if ((i!=j)and(j!=k)and(k!=i)):  #把重復(fù)的數(shù)字去掉
                    print(i,j,k)
                    tm+=1
    print('總共組合了' ,tm, '個數(shù)字')

程序運行結(jié)果如圖3-14所示。

圖3-14 例3.10的程序運行結(jié)果

若想跳出循環(huán),則可以使用break語句。該語句用于跳出當(dāng)前循環(huán)體。

【例3.11】for語句和break語句的綜合應(yīng)用(源代碼\ch03\3.11.py)。

下面的例子是實現(xiàn)快速搜索到人名為間諜的人,然后跳出循環(huán)。

    name = ["小明", "張三","李四","王五","間諜","小雨"]
    for n in name:
       if n == "間諜":
           print("找到名字為間諜的人啦!")
           break
       print(n)
    else:
       print("沒有發(fā)現(xiàn)名字為間諜的人!")
    print("人名搜索完畢!")

程序運行結(jié)果如圖3-15所示。從結(jié)果可以看出,當(dāng)搜索到“間諜”時,會跳出當(dāng)前循環(huán),對應(yīng)的循環(huán)else塊將不執(zhí)行。

圖3-15 例3.11的程序運行結(jié)果

3.4.3 continue語句和else語句

使用continue語句,Python將跳過當(dāng)前循環(huán)塊中的剩余語句,繼續(xù)進行下一輪循環(huán)。

【例3.12】while語句和continue語句的配合使用(源代碼\ch03\3.12.py)。

此例主要輸出以10開始遞減的整數(shù),并且遞減間隔為2,最小數(shù)為0。

    a = 10
    while a >0:
      a=a-2
      if a==6:     #變量為6時跳過輸出
         continue
      print (a, "   大于或等于0")

程序運行結(jié)果如圖3-16所示。從結(jié)果可以看出,當(dāng)變量為6時,將跳出當(dāng)前循環(huán),進入下一個循環(huán)。

圖3-16 例3.12的程序運行結(jié)果

當(dāng)for循環(huán)被執(zhí)行完畢或while循環(huán)條件為False時,else語句才會被執(zhí)行。需要特別注意的是,如果循環(huán)被break語句終止,那么else語句不會被執(zhí)行。

【例3.13】for、break和else語句的配合使用(源代碼\ch03\3.13.py)。

    a= "萬樹鳴蟬隔岸虹,樂游原上有西風(fēng)。"
    for b in a:               #包含break 語句
      if b== '樂':            #文字為“樂”時跳過輸出
         print ('當(dāng)前文字是:', aa)
    break
      else:
         print ('沒有發(fā)現(xiàn)對應(yīng)的文字')

程序運行結(jié)果如圖3-17所示。從結(jié)果可以看出,當(dāng)搜索到文字“樂”時,將通過break語句跳出循環(huán)。

圖3-17 例3.13的程序運行結(jié)果

3.4.4 pass語句

pass是空語句,主要為了保持程序結(jié)構(gòu)的完整性。pass不做任何事情,一般用作占位語句。

【例3.14】for和pass語句的配合使用(源代碼\ch03\3.14.py)。

    for a in '羲和自趁虞泉宿,不放斜陽更向東。':
      if a == '不':
         pass
         print ('執(zhí)行pass 語句')
      print ('當(dāng)前文字:' a)
    print ("搜索完畢!")

程序運行結(jié)果如圖3-18所示。從結(jié)果可以看出,當(dāng)搜索到文字“不”時,先執(zhí)行print ('執(zhí)行pass語句'),然后執(zhí)行print ('當(dāng)前文字:', a)。

圖3-18 例3.14的程序運行結(jié)果

主站蜘蛛池模板: 蕲春县| 湟中县| 开江县| 襄樊市| 云浮市| 宿迁市| 西青区| 肥东县| 奉化市| 喀喇沁旗| 普兰店市| 阜新| 晋宁县| 屏东市| 赤壁市| 扬州市| 米易县| 眉山市| 山阴县| 崇明县| 星子县| 九龙坡区| 徐汇区| 莲花县| 南宁市| 边坝县| 太康县| 龙里县| 洛南县| 屏边| 邯郸市| 赤峰市| 玉林市| 古浪县| 正宁县| 奇台县| 鄯善县| 平凉市| 来宾市| 方城县| 德州市|