標籤:chap 內容 瞭解 迴圈結構 語言 計算 順序 迴圈 ret
程式設計中的控制語句有三種,即順序、分支和迴圈語句。Python程式通過控制語句來管理程式流,完成一定的任務。程式流是由若干個語句組成的,語句可以是一條單一的語句,也可以是複合陳述式。Python中的控制語句有以下幾類:
分支語句:if
迴圈語句:while和for
- 跳躍陳述式:break、continue和return
分支語句
分支語句提供了一種控制機制,使得程式具有了“判斷能力”,能夠像人類的大腦一樣分析問題。分支語句又稱條件陳述式,條件陳述式使部分程式可根據某些運算式的值被有選擇地執行。
Python中的分支語句只有if語句。if語句有三種結構:if結構、if-else結構和elif結構三種。
if結構
如果條件計算為True就執行語句組,否則就執行if結構後面的語句。文法結構如下:
if 條件 : 語句組
if結構範例程式碼如下:
# coding=utf-8# 代碼檔案:chapter8/8.1.1/hello.pyimport sysscore = int(sys.argv[1]) # 獲得命令列傳入的參數 ①if score >= 85: print("您真優秀!")if score < 60: print("您需要加倍努力!")if (score >= 60) and (score < 85): print("您的成績還可以,仍需繼續努力!")
為了靈活輸入分數(score)本例中使用了sys.argv,sys.argv能夠返回命令列參數列表,見代碼第①行。sys.argv[1]返回參數列表的第二個元素,因為第一個元素(sys.argv[0])是執行的Python檔案名稱。由於參數列表中元素的字串,所以還需要使用int函數將字串轉換為int類型。另外,為了使用sys.argv命令列參數列表,還需要在檔案開始通過import
sys語句匯入sys模組。
執行時需要開啟Windows命令列提示符,輸入如下指令,8-1所示。
python ch8.1.1.py 80
如果在程式需要擷取sys.argv[0]元素傳回值是ch8.1.1.py。
注意 使用sys.argv擷取命令列參數列表的程式碼,不能在Python
Shell環境下運行獲得參數列表。
if-else結構
幾乎所有的電腦語言都有這個結構,而且結構的格式基本相同,語句如下:
if 條件 : 語句組1 else : 語句組2
當程式執行到if語句時,先判斷條件,如果值為True,則執行語句組1,然後跳過else語句及語句組2,繼續執行後面的語句。如果條件為False,則忽略語句組1而直接執行語句組2,然後繼續執行後面的語句。
if-else結構範例程式碼如下:
# coding=utf-8# 代碼檔案:chapter8/ch8.1.2.pyimport sysscore = int(sys.argv[1]) # 獲得命令列傳入的參數if score >= 60: print("及格") if score >= 90: print("優秀")else:print("不及格")
樣本執行過程參考8.1.1節,這裡不再贅述。
elif結構
elif結構如下:
if 條件1 : 語句組1 elif 條件2 : 語句組2elif 條件3 : 語句組3 ... elif 條件n : 語句組nelse : 語句組n+1
可以看出,elif結構實際上是if-else結構的多層嵌套,它明顯的特點就是在多個分支中只執行一個語句組,而其他分支都不執行,所以這種結構可以用於有多種判斷結果的分支中。
elif結構範例程式碼如下:
# coding=utf-8# 代碼檔案:chapter8/ch8.1.3.pyimport sysscore = int(sys.argv[1]) # 獲得命令列傳入的參數if score >= 90: grade = ‘A‘elif score >= 80: grade = ‘B‘elif score >= 70: grade = ‘C‘elif score >= 60: grade = ‘D‘else: grade = ‘F‘print("Grade = " + grade)
樣本執行過程參考8.1.1節,這裡不再贅述。
三元運算子替代品——條件運算式
在前面學習運算子時,並沒有提到類似Java語言的三元運算子[^1]。為提供類似的功能Python提供了條件運算式,條件運算式文法如下:
[^1]: 三元運算子的文法形式:條件 ? 運算式1 :
運算式2,當條件為真時,運算式1返回,否則運算式2返回。
> 運算式1 if 條件 else 運算式2
其中,當條件計算為True時,返回運算式1,否則返回運算式2。
條件運算式例代碼如下:
# coding=utf-8# 代碼檔案:chapter8/ch8.1.4.pyimport sysscore = int(sys.argv[1]) # 獲得命令列傳入的參數result = ‘及格‘ if score >= 60 else ‘不及格‘print(result)
樣本執行過程參考8.1.1節,這裡不再贅述。
從樣本可見,條件運算式事實上就是if-else結構,而普通的if-else結構不是運算式,不會有傳回值,而條件運算式比較進行條件判斷,而且還會有傳回值。
迴圈語句
迴圈語句能夠使程式碼重複執行。Python支援兩種迴圈構造類型:while和for。
while語句
while語句是一種先判斷的迴圈結構,格式如下:
while 迴圈條件 : 語句組 [else: 語句組]
while迴圈沒有初始化語句,迴圈次數是不可知的,只要迴圈條件滿足,迴圈就會一直執行迴圈體。while迴圈中可以帶有else語句,else語句將在8.3節詳細介紹。
下面看一個簡單的樣本,代碼如下:
# coding=utf-8# 代碼檔案:chapter8/ch8.2.1.pyi = 0while i * i < 100_000: i += 1print("i = {0}".format(i))print("i * i = {0}".format(i * i))
輸出結果如下:
i = 317i * i = 100489
上述程式碼的目的是找到平方數小於100_000的最大整數。使用while迴圈需要注意幾點,while迴圈條件陳述式中只能寫一個運算式,而且是一個布爾型運算式,那麼如果迴圈體中需要迴圈變數,就必須在while語句之前對迴圈變數進行初始化。本例中先給i賦值為0,然後在迴圈體內部必須通過語句更改迴圈變數的值,否則將會發生死迴圈。
提示
為了閱讀方便,整數和浮點數均可添加多個0或底線以提高可讀性,如000.01563和_360_000,兩種格式均不會影響實際值。底線一般是每三位加一個。
for語句
for語句是應用最廣泛、功能最強的一種迴圈語句。Python語言中沒有C語言風格的for語句,它的for語句相等於Java中增強for迴圈語句,只用於對序列,序列包括字串、列表和元組進行遍曆。
for語句一般格式如下:
for 迭代變數 in 序列 : 語句組[else: 語句組]
“序列”表示所有的實現序列的類型都可以使用for迴圈。“迭代變數”是從序列中迭代取出的元素,然後執行迴圈體。for迴圈中也可以帶有else語句,else語句將在8.3節詳細介紹。
範例程式碼如下:
# coding=utf-8# 代碼檔案:chapter8/ch8.2.2.pyprint("----範圍-------")for num in range(1, 10): # 使用範圍 ① print("{0} x {0} = {1}".format(num, num * num))print("----字串-------")# for語句for item in ‘Hello‘: ② print(item)# 聲明整數列表numbers = [43, 32, 53, 54, 75, 7, 10] ③print("----整數列表-------")# for語句for item in numbers: ④ print("Count is : {0}".format(item))
輸出結果:
----範圍-------1 x 1 = 12 x 2 = 43 x 3 = 94 x 4 = 165 x 5 = 256 x 6 = 367 x 7 = 498 x 8 = 649 x 9 = 81----字串-------Hello----整數列表-------Count is : 43Count is : 32Count is : 53Count is : 54Count is : 75Count is : 7Count is : 10
上述代碼第①行range(1, 10)函數是建立範圍(range)對象,它的取值是1 ≤ range(1, 10)
\< 10,步長為1,總共10整數。範圍也一種整數序列,關於範圍會在8.4節詳細介紹。
代碼第②行是迴圈字串Hello,字串也是一個序列,所以可以用for迴圈變數。
代碼第③行是定義整數列表,關於列表會在後面第9章詳細介紹。代碼第④行是遍曆列表numbers。
跳躍陳述式
跳躍陳述式能夠改變程式的執行順序,可以實現程式的跳轉。Python有3種跳躍陳述式:break、continue和return。本節重點介紹break和continue語句的使用。return將後面章節介紹。
break語句
break語句可用於上一節介紹的while和for迴圈結構,它的作用是強行退出迴圈體,不再執行迴圈體中剩餘的語句。
下面看一個樣本,代碼如下:
# coding=utf-8# 代碼檔案:chapter8/ch8.3.1.pyfor item in range(10): if item == 3: # 跳出迴圈 break print("Count is : {0}".format(item))
在上述程式碼中,當條件item
==3的時候執行break語句,break語句會終止迴圈。range(10)函數省略了開始參數,預設是從0開始的。程式啟動並執行結果如下:
Count is : 0Count is : 1Count is : 2
continue語句
continue語句用來結束本次迴圈,跳過迴圈體中尚未執行的語句,接著進行終止條件的判斷,以決定是否繼續迴圈。
下面看一個樣本,代碼如下:
# coding=utf-8# 代碼檔案:chapter8/ch8.3.2.pyfor item in range(10): if item == 3: continue print("Count is : {0}".format(item))
在上述程式碼中,當條件item
==3的時候執行continue語句,continue語句會終止本次迴圈,迴圈體中continue之後的語句將不再執行,接著進行下次迴圈,所以輸出結果中沒有3。程式運行結果如下:
Count is: 0Count is: 1Count is: 2Count is: 4Count is: 5Count is: 6Count is: 7Count is: 8Count is: 9
while和for中的else語句
在前面8.2節介紹while和for迴圈時,還提到他們都可以跟有else語句,它與if語句中的else不同。這裡的else是在迴圈體正常結束時才啟動並執行代碼,當迴圈被中斷時不執行,break、return和異常拋出都會中斷迴圈。迴圈中的else語句流程圖8-2所示。
範例程式碼如下:
# coding=utf-8# 代碼檔案:chapter8/ch8.3.3.pyi = 0while i * i < 10: i += 1 # if i == 3: # break print("{0} * {0} = {1}".format(i, i * i))else: print(‘While Over!‘)print(‘-------------‘)for item in range(10): if item == 3: break print("Count is : {0}".format(item))else: print(‘For Over!‘)
運行結果如下:
1 * 1 = 12 * 2 = 43 * 3 = 94 * 4 = 16While Over!-------------Count is : 0Count is : 1Count is : 2
上述代碼中在while迴圈中break語句被注釋了,因此會進入else語句,所以最後輸出While
Over!。而在for迴圈中當條件滿足時break語句執行,程式不會進入else語句,最後沒有輸出For
Over!。
使用範圍
在前面的學習過程中多次需要使用範圍,範圍在Python中類型是range,表示一個整數序列,建立範圍對象使用range()函數,range()函數文法如下:
range([start,] stop[, step])
三個參數全部是整數類型,其中start是開始值,可以省略,表示從0開始;stop是結束值;step是步長。注意start
≤ 整數序列取值 \< stop,步長step可以為負數,可以建立遞減序列。
範例程式碼如下:
# coding=utf-8# 代碼檔案:chapter8/ch8.3.4.pyfor item in range(1, 10, 2): ① print("Count is : {0}".format(item))print(‘--------------‘)for item in range(1, -10, -3): ② print("Count is : {0}".format(item))
輸出結果如下:
Count is : 1Count is : 3Count is : 5Count is : 7Count is : 9--------------Count is : 0Count is : -3Count is : -6Count is : -9
上述代碼第①行是建立一個範圍,步長是2,包含的元素見輸出結果,有5個元素。代碼第②行是建立一個遞減範圍,步長是-3,包含的元素見輸出結果,有4個元素,包含的元素見輸出結果。
本章小結
通過對本章內容的學習,讀者可以瞭解到Python語言的控制語句,其中包括分支語句if、迴圈語句(while和for)和跳躍陳述式(break和continue)等。最後還介紹了範圍。
配套視頻
http://edu.51cto.com/topic/1507.html
配套原始碼
http://www.zhijieketang.com/group/8
電子書
https://yuedu.baidu.com/ebook/5823871e59fafab069dc5022aaea998fcc2240fc
作者微博:@tony_關東升br/>郵箱:[email protected]
Python讀者服務QQ群:628808216
《Python從小白到大牛》第8章 控制語句