《Python從小白到大牛》第8章 控制語句

來源:互聯網
上載者:User

標籤: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章 控制語句

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.