簡明Python3教程 8.控制流


簡介

迄今為止我們見到的所有程序總是含有一連串語句並且python忠實的順序執行它們。

那么如何改變它們的執行順序呢?例如你希望程序根據不同情況作出不同反應,按照當前時間分別

打印出’Good Morning’或’Good Evening’?

也許你已經猜到了,這需要使用控制流程語句,python擁有3種此類語句,分別為if,forwhile

 

if語句

if語句用來檢查一個條件,如果條件為則執行一個語句塊(被稱作if),否則執行另一個語句塊(被稱作else)。

其中else分支是可選的。

范例:

#!/usr/bin/python

# Filename: if.py

number = 23

guess = int(input('Enter an integer : '))

if guess == number:

    print('Congratulations, you guessed it.') # 新塊開始處

    print('(but you do not win any prizes!)') # 新塊結束處

elif guess < number:

    print('No, it is a little higher than that') # 另一個塊

    # 你可以在一個塊里做任何你想做的。。。

else:

    print('No, it is a little lower than that')

    # 只有guess > number 才會執行到此處

print('Done')

# if語句執行完畢后,最后這條語句永遠會被執行

輸出:

    $ python if.py

    Enter an integer : 50

    No, it is a little lower than that

    Done

   

    $ python if.py

    Enter an integer : 22

    No, it is a little higher than that

    Done

   

    $ python if.py

    Enter an integer : 23

    Congratulations, you guessed it.

    (but you do not win any prizes!)

    Done

程序流程:

本程序將用戶猜測的數對比被猜的數(注: 23)。

我們可以將被猜數定為任何整數。然后利用input()函數得到用戶猜測的數。

函數只是可復用的程序片段,下章我們會學到更多關於函數的知識。

我們為內建input函數提供一個字符串,函數會將它打印到屏幕,一但我們輸入了什么並按下回車,

input就會將輸入當作一個字符串返回,之后利用int我們將其轉換為一個整數並存入變量guess中。

實際上int是一個類,現在你只需知道它能將一個字符串轉換為整數(假設字符串包含一個合法的文本

形式的整數)。

接下來我們比較用戶猜測的數與被猜的數,如果它們相等我們就打印一個成功信息。注意我們

使用縮進告訴python語句分別屬於哪些塊,這就是為什么縮進對於python非常重要。

我也希望你能做到前文提到的”縮進一致性”規則,你可以嗎?

同時也要注意到if語句的結尾包含一個分號 – 它指示python分號其后將跟隨一個語句塊。

緊接着我們檢查猜測的數是否小於被猜數,如果是,則告訴用戶猜測的數大了一些。

這里我們使用的是elif分支,事實上它把兩個相關的if else-if else語句組合成一個if-elif-else語句。

這樣做不僅使得程序更加簡潔也降低了縮進數量。

同樣,elifelse語句必須在邏輯行的結尾寫上冒號,其后是與之對應的語句塊(當然還要有相應的縮進)

最后你也可以在if語句中插入另一個if-block塊,這叫做嵌套的if語句。

上面說過elif和else是可選的。一個最簡單合法的if語句如下:

if True:

    print('Yes, it is true')

當python執行完if語句及其相關的elif和else分支,控制權會轉移到包含此if語句的語句塊的下一條語句。

本例中,這個塊是主塊,程序從此塊開始執行,下一個條語句為print(‘Done’)

隨后python看到程序的結尾並簡單的結束運行。

盡管程序非常簡單,我也指出了這個簡單程序中你所有應該注意的地方。

這一切十分易懂(有C/C++背景更是如此),但在最初你還是要引起注意,等到用熟以后就會感到自然,順手了。

C/C++程序員請注意

python沒有switch語句,你可以使用if…elif…else語句達到同樣的目的(有時用字典代替會更加快捷)。

 

while語句

只要條件為真,while語句允許你不斷的重復執行語句塊。

while語句是所謂循環語句的一個例子,它還可以擁有一個可選的else分支。

范例:

#!/usr/bin/python

# Filename: while.py

number = 23

running = True

while running:

    guess = int(input('Enter an integer : '))

    if guess == number:

        print('Congratulations, you guessed it.')

        running = False # this causes the while loop to stop

    elif guess < number:

        print('No, it is a little higher than that.')

    else:

        print('No, it is a little lower than that.')

else:

    print('The while loop is over.')

    # Do anything else you want to do here

print('Done')

輸出:

    $ python while.py

    Enter an integer : 50

    No, it is a little lower than that.

    Enter an integer : 22

    No, it is a little higher than that.

    Enter an integer : 23

    Congratulations, you guessed it.

    The while loop is over.

Done

工作流程

本例中我們繼續玩猜數字游戲,不過更先進的是用戶可以不斷的猜直到猜對為止 – 如此就不會象

上一個范例那樣用戶每猜一次都運行一遍程序了。這正好可以恰當的示范while語句的使用。

我們將input和if語句移進while循環內,並在循環開始前將變量running設為True

最初我們檢查變量running是否為True並進入while塊執行之。while塊執行完畢后繼續檢查條件,即running是否為真。

如果是則再次執行while塊,否則可選的else塊將被執行。完畢后再執行下一條語句。

只有while語句的條件為False時else才會被執行 – 就算條件第一次被檢查時也是如此。

因此除非使用break跳出循環,否則while循環的else分支肯定會被執行。

TrueFalse被稱為Boolean類型,你可以分別把它們看作是值1和0。

(注:只是”看作”而已,不要認為它們完全等於0和1)

寫給C/C++程序員

記住,while循環可以擁有else分支

 

for循環

for…in是另一種循環語句,用來遍歷序列對象,也就是說遍歷序列中的每個元素。

至於序列對象,你現在只要記住序列只是元素的集合就可以了。

范例:

#!/usr/bin/python

# Filename: for.py

for i in range(1, 5):

    print(i)

else:

    print('The for loop is over')

輸出

    $ python for.py

    1

    2

    3

    4

The for loop is over

執行流程

在這個程序中,我們打印了一個數字序列。而這個序列由內建range函數產生。

根據我們提供的兩個數字,range返回一個開始於第一個數字而結束於第二個數的序列,例如

range(1, 5)產生序列[1, 2, 3, 4]。默認的range步長為1。如果我們傳給它第三個數字,則相當於設置步長。

例如range(1, 5, 2)產生[1, 3]。記住range函數止步於我們提供的第2個數字,即不包含第2個數。

然后for循環對其進行迭代 – for i in range(1, 5)等價於for I in [1, 2, 3, 4]就象將序列中的每個數

字(或對象)一次一個的賦給i,而每次賦值都會執行一遍for語句塊。本例中我們僅僅打印i的值。

記住,else部分同樣是可選的,除非使用break語句跳出循環否則它總是在循環結束時執行一次。

還應記住,for…in可以工作於任何序列,這里我們使用的是內建函數range產生的數字列表,

但我們也可以使用任何種類的對象組成的任何種類的序列!后面的章節會有具體解釋。

C/C++/Java/C#請注意

python的for循環完全不同於C/C++的for循環。

C#程序員應該已經注意到它類似於C#中的foreach循環。

而Java程序員也應該注意到了Java1.5的for(int i : IntArray)與之很相似。

如果你想實現C/C++中的for(int i = 0; i< 5; i++),python中只需編寫 for i in range(0, 5)

如你所見,python的for循環更簡單,更富於表達力也更不容易出錯。

 

break語句

break語句用於跳出循環,即停止循環語句的執行,即使循環條件還沒有變為False或者序列的遍歷尚未完成。

一個需要特別注意的地方是如果你使用break跳出for或while循環,那么相關的else塊不會被執行。

范例

#!/usr/bin/python

# Filename: break.py

while True:

    s = (input('Enter something : '))

    if s == 'quit':

        break

    print('Length of the string is', len(s))

print('Done')

輸出:

    $ python break.py

    Enter something : Programming is fun

    Length of the string is 18

    Enter something : When the work is done

Length of the string is 21

Enter something : if you wanna make your work also fun:

Length of the string is 37

Enter something :       use Python!

Length of the string is 12

Enter something : quit

Done

工作流程

這個程序不斷的取得用戶輸入,並打印每次輸入的長度。通過一個特殊條件判斷用戶

輸入是否等於’quit’,如果是則使用break跳出循環,隨后來到程序尾則程序終止。

而輸入字符串的長度可以通過內建函數len得到。

記住for循環同樣可以使用break語句。

 

Swaroop Poetic Python

我在范例中輸入的是一首自賦的小詩,它的名字叫Swaroop's Poetic Python:

    Programming is fun

    When the work is done

    if you wanna make your work also fun:

        use Python!

(注: Swaroop是本文作者,不翻譯了,各位用個人獨有的悠悠情愫”淫”起來吧,啊。。。。啊。。。。)

 

continue語句

語句continue告訴python跳過當前循環語句塊的剩余部分執行下次迭代。

范例:

#!/usr/bin/python

# Filename: continue.py

while True:

    s = input('Enter something : ')

    if s == 'quit':

        break

    if len(s) < 3:

        print('Too small')

        continue

    print('Input is of sufficient length')

    # Do other kinds of processing here...

輸出:

    $ python test.py

    Enter something : a

    Too small

    Enter something : 12

Too small

Enter something : abc

Input is of sufficient length

Enter something : quit

工作流程:

本例接收用戶輸入,只有當輸入至少為3個字符長時才會進行處理。

因此我們使用內建len函數取得輸入長度,當小於3時利用continue語句跳過程序的余下部分。

否則程序的余下部分會被執行,在這里可以進行我們希望做的任何種類的處理。

注意,continue語句同樣能夠配合for循環使用。

 

小結

我們已經知道如何使用python中的3個控制流語句了 - if, while, for及其相關的break, continue語句。

它們是python中常用的部分,因此有必要熟練掌握。

接下來,我們會看到如何創建和使用函數

 

 

 

 

--------------Python書籍推薦-----------------
Python基礎教程-第2版.修訂版 
 
 
PYTHON核心編程
 
 
零基礎學Python


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM