《Python從小白到大牛》第8章 控制語句
-
分支語句: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.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所示。
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.py
import sys
score = int(sys.argv[1]) # 獲得命令行傳入的參數
if score >= 60:
print("及格")
if score >= 90:
print("優秀")
else:
print("不及格")
示例執行過程參考8.1.1節,這裏不再贅述。
elif結構
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語句是一種先判斷的循環結構,格式如下:
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語句
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語句
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語句
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
while和for中的else語句
在前面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://edu.51cto.com/topic/1507.html
配套源代碼
http://www.zhijieketang.com/group/8
電子書
https://yuedu.baidu.com/ebook/5823871e59fafab069dc5022aaea998fcc2240fc
作者微博:@tony_關東升郵箱:[email protected]
br/>郵箱:[email protected]
Python讀者服務QQ群:628808216
《Python從小白到大牛》第8章 控制語句