《Python從小白到大牛》已經上市!
程序設計中的控制語句有三種,即順序、分支和循環語句。Python程序經過控制語句來管理程序流,完成必定的任務。程序流是由若干個語句組成的,語句能夠是一條單一的語句,也能夠是複合語句。Python中的控制語句有如下幾類:html
分支語句:ifpython
循環語句:while和for微信
分支語句提供了一種控制機制,使得程序具備了「判斷能力」,可以像人類的大腦同樣分析問題。分支語句又稱條件語句,條件語句使部分程序可根據某些表達式的值被有選擇地執行。ide
Python中的分支語句只有if語句。if語句有三種結構:if結構、if-else結構和elif結構三種。函數
若是條件計算爲True就執行語句組,不然就執行if結構後面的語句。語法結構以下:學習
if 條件 : 語句組
if結構示例代碼以下:命令行
# coding=utf-8 # 代碼文件:chapter8/8.1.1/hello.py import sys score = 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所示。code
python ch8.1.1.py 80
若是在程序須要獲取sys.argv[0]元素返回值是ch8.1.1.py。orm
注意 使用sys.argv獲取命令行參數列表的程序代碼,不能在Python
Shell環境下運行得到參數列表。
幾乎全部的計算機語言都有這個結構,並且結構的格式基本相同,語句以下:
if 條件 : 語句組1 else : 語句組2
當程序執行到if語句時,先判斷條件,若是值爲True,則執行語句組1,而後跳過else語句及語句組2,繼續執行後面的語句。若是條件爲False,則忽略語句組1而直接執行語句組2,而後繼續執行後面的語句。
if-else結構示例代碼以下:
# coding=utf-8 # 代碼文件:chapter8/ch8.1.2.py import sys score = int(sys.argv[1]) # 得到命令行傳入的參數 if score >= 60: print("及格") if score >= 90: print("優秀") else: print("不及格")
示例執行過程參考8.1.1節,這裏再也不贅述。
elif結構以下:
if 條件1 : 語句組1 elif 條件2 : 語句組2 elif 條件3 : 語句組3 ... elif 條件n : 語句組n else : 語句組n+1
能夠看出,elif結構其實是if-else結構的多層嵌套,它明顯的特色就是在多個分支中只執行一個語句組,而其餘分支都不執行,因此這種結構能夠用於有多種判斷結果的分支中。
elif結構示例代碼以下:
# coding=utf-8 # 代碼文件:chapter8/ch8.1.3.py import sys score = 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.py import sys score = int(sys.argv[1]) # 得到命令行傳入的參數 result = '及格' if score >= 60 else '不及格' print(result)
示例執行過程參考8.1.1節,這裏再也不贅述。
從示例可見,條件表達式事實上就是if-else結構,而普通的if-else結構不是表達式,不會有返回值,而條件表達式比較進行條件判斷,並且還會有返回值。
循環語句可以使程序代碼重複執行。Python支持兩種循環構造類型:while和for。
while語句是一種先判斷的循環結構,格式以下:
while 循環條件 : 語句組 [else: 語句組]
while循環沒有初始化語句,循環次數是不可知的,只要循環條件知足,循環就會一直執行循環體。while循環中能夠帶有else語句,else語句將在8.3節詳細介紹。
下面看一個簡單的示例,代碼以下:
# coding=utf-8 # 代碼文件:chapter8/ch8.2.1.py i = 0 while i * i < 100_000: i += 1 print("i = {0}".format(i)) print("i * i = {0}".format(i * i))
輸出結果以下:
i = 317 i * i = 100489
上述程序代碼的目的是找到平方數小於100_000的最大整數。使用while循環須要注意幾點,while循環條件語句中只能寫一個表達式,並且是一個布爾型表達式,那麼若是循環體中須要循環變量,就必須在while語句以前對循環變量進行初始化。本例中先給i賦值爲0,而後在循環體內部必須經過語句更改循環變量的值,不然將會發生死循環。
提示
爲了閱讀方便,整數和浮點數都可添加多個0或下劃線以提升可讀性,如000.01563和_360_000,兩種格式均不會影響實際值。下劃線通常是每三位加一個。
for語句是應用最普遍、功能最強的一種循環語句。Python語言中沒有C語言風格的for語句,它的for語句相等於Java中加強for循環語句,只用於對序列,序列包括字符串、列表和元組進行遍歷。
for語句通常格式以下:
for 迭代變量 in 序列 : 語句組 [else: 語句組]
「序列」表示全部的實現序列的類型均可以使用for循環。「迭代變量」是從序列中迭代取出的元素,而後執行循環體。for循環中也能夠帶有else語句,else語句將在8.3節詳細介紹。
示例代碼以下:
# coding=utf-8 # 代碼文件:chapter8/ch8.2.2.py print("----範圍-------") 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 = 1 2 x 2 = 4 3 x 3 = 9 4 x 4 = 16 5 x 5 = 25 6 x 6 = 36 7 x 7 = 49 8 x 8 = 64 9 x 9 = 81 ----字符串------- H e l l o ----整數列表------- Count is : 43 Count is : 32 Count is : 53 Count is : 54 Count is : 75 Count is : 7 Count 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語句可用於上一節介紹的while和for循環結構,它的做用是強行退出循環體,再也不執行循環體中剩餘的語句。
下面看一個示例,代碼以下:
# coding=utf-8 # 代碼文件:chapter8/ch8.3.1.py for item in range(10): if item == 3: # 跳出循環 break print("Count is : {0}".format(item))
在上述程序代碼中,當條件item
==3的時候執行break語句,break語句會終止循環。range(10)函數省略了開始參數,默認是從0開始的。程序運行的結果以下:
Count is : 0 Count is : 1 Count is : 2
continue語句用來結束本次循環,跳過循環體中還沒有執行的語句,接着進行終止條件的判斷,以決定是否繼續循環。
下面看一個示例,代碼以下:
# coding=utf-8 # 代碼文件:chapter8/ch8.3.2.py for item in range(10): if item == 3: continue print("Count is : {0}".format(item))
在上述程序代碼中,當條件item
==3的時候執行continue語句,continue語句會終止本次循環,循環體中continue以後的語句將再也不執行,接着進行下次循環,因此輸出結果中沒有3。程序運行結果以下:
Count is: 0 Count is: 1 Count is: 2 Count is: 4 Count is: 5 Count is: 6 Count is: 7 Count is: 8 Count is: 9
在前面8.2節介紹while和for循環時,還提到他們均可以跟有else語句,它與if語句中的else不一樣。這裏的else是在循環體正常結束時才運行的代碼,當循環被中斷時不執行,break、return和異常拋出都會中斷循環。循環中的else語句流程圖如圖8-2所示。
示例代碼以下:
# coding=utf-8 # 代碼文件:chapter8/ch8.3.3.py i = 0 while 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 = 1 2 * 2 = 4 3 * 3 = 9 4 * 4 = 16 While Over! ------------- Count is : 0 Count is : 1 Count 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.py for 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 : 1 Count is : 3 Count is : 5 Count is : 7 Count is : 9 -------------- Count is : 0 Count is : -3 Count is : -6 Count is : -9
上述代碼第①行是建立一個範圍,步長是2,包含的元素見輸出結果,有5個元素。代碼第②行是建立一個遞減範圍,步長是-3,包含的元素見輸出結果,有4個元素,包含的元素見輸出結果。
經過對本章內容的學習,讀者能夠了解到Python語言的控制語句,其中包括分支語句if、循環語句(while和for)和跳轉語句(break和continue)等。最後還介紹了範圍。
http://www.zhijieketang.com/group/8
https://yuedu.baidu.com/ebook/5823871e59fafab069dc5022aaea998fcc2240fc
做者微博:@tony_關東昇br/>郵箱:eorient@sina.com智捷課堂微信公共號:zhijieketangPython讀者服務QQ羣:628808216