1. 程式人生 > >Python入門四控制流程

Python入門四控制流程

控制流

在我們迄今為止看過的程式中,一直有一系列由Python以自​​上而下的順序忠實執行的語句。如果你想改變它的工作流程怎麼辦?例如,您希望程式根據不同的情況做出一些決定並做不同的事情,例如根據一天中的時間列印“早上好”或“晚上好”?

您可能已經猜到,這是使用控制流語句實現的。在Python三種控制流語句- ifforwhile

if宣告

if語句用於檢查條件:如果條件為真,則執行一個語句塊(稱為if-block),否則我們處理另一個語句塊(稱為else-block)。在其他子句是可選的。

示例(另存為if.py):

控制流

在我們迄今為止看過的程式中,一直有一系列由Python以自​​上而下的順序忠實執行的語句。如果你想改變它的工作流程怎麼辦?例如,您希望程式根據不同的情況做出一些決定並做不同的事情,例如根據一天中的時間列印“早上好”或“晚上好”?

您可能已經猜到,這是使用控制流語句實現的。在Python三種控制流語句- ifforwhile

if宣告

if語句用於檢查條件:如果條件為真,則執行一個語句塊(稱為if-block),否則我們處理另一個語句塊(稱為else-block)。在其他子句是可選的。

示例(另存為if.py):

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

if guess == number:
    # New block starts here
    print('Congratulations, you guessed it.'
) print('(but you do not win any prizes!)') # New block ends here elif guess < number: # Another block print('No, it is a little higher than that') # You can do whatever you want in a block ... else: print('No, it is a little lower than that') # you must have guessed > number to reach here
print('Done') # This last statement is always executed, # after the if statement is executed.

輸出:

$ 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

這個怎麼運作

在這個程式中,我們從使用者那裡猜測並檢查它是否是我們擁有的數字。我們將變數設定為number我們想要的任何整數23。然後,我們使用該input()功能進行使用者的猜測。功能只是可重複使用的程式。我們將在下一章中詳細介紹它們。

我們為內建input函式提供一個字串,將其列印到螢幕上並等待使用者輸入。輸入內容並按kbd:[enter]鍵後,該input()函式將返回我們輸入的內容,作為字串。然後,我們將此字串轉換為整數int,然後將其儲存在變數中guess。實際上,這int是一個類,但您現在需要知道的是,您可以使用它將字串轉換為整數(假設字串在文字中包含有效的整數)。

接下來,我們將使用者的猜測與我們選擇的數字進行比較。如果它們相等,我們會列印成功訊息。請注意,我們使用縮排級別來告訴Python哪些語句屬於哪個塊。這就是縮排在Python中如此重要的原因。我希望你堅持“一致的縮排”規則。你是?

注意if語句最後是如何包含冒號的 - 我們向Python指出後面是一個語句塊。

然後,我們檢查猜測是否小於數字,如果是,我們通知使用者他們必須猜測比這更高一點。我們在這裡使用的是elif實際將兩個相關if else-if else語句組合成一個組合if-elif-else語句的子句。這使程式更容易,減少了所需的縮排量。

elifelse語句也必須有(當然與適當的縮排,)在邏輯行隨後的語句其對應的塊的端部的結腸

您可以在if語句的if塊中包含另一個if語句,依此類推 - 這稱為巢狀if語句。

請記住,elifelse部分是可選的。最小的有效if宣告是:

if True:
    print('Yes, it is true')

在Python完成執行完整if語句以及關聯的elifelse子句之後,它將繼續執行包含該if語句的塊中的下一個語句。在這種情況下,它是主塊(程式的執行開始),下一個語句是print('Done')語句。在此之後,Python會看到程式的結尾並完成。

即使這是一個非常簡單的程式,我也指出了很多你應該注意到的事情。所有這些都非常簡單(對於那些來自C / C ++背景的人來說非常簡單)。你最初需要了解所有這些事情,但經過一些練習後你會對它們感到滿意,而且對你來說都會感覺“自然”。

C / C ++程式設計師注意事項

switchPython中沒有宣告。您可以使用if..elif..else語句執行相同的操作(在某些情況下,使用字典快速執行)

while宣告

while只要條件為真,該語句允許您重複執行語句塊。一個while說法是所謂的一個例子迴圈語句。一個while語句可以有一個可選的else條款。

示例(另存為while.py):

number = 23
running = True

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

    if guess == number:
        print('Congratulations, you guessed it.')
        # this causes the while loop to stop
        running = False
    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陳述的使用。

我們移動inputif語句內部while迴圈和變數設定runningTruewhile迴圈之前。首先,我們檢查變數running是否True然後繼續執行相應的while-block。在執行該塊之後,再次檢查條件,在這種情況下是running變數。如果是,我們再次執行while-block,否則我們繼續執行可選的else-block,然後繼續執行下一個語句。

elsewhile迴圈條件變為時執行該塊False- 這甚至可能是第一次檢查條件。如果有else一個while迴圈的子句,它總是被執行,除非你用一個break語句中斷迴圈。

TrueFalse被稱為布林型別,你可以認為他們是等同於價值10分別。

C / C ++程式設計師注意事項

請記住,您可以elsewhile迴圈建立一個子句。

for

for..in語句是另一個迴圈語句,它迭代一系列物件,即遍歷序列中的每個元素。我們將在後面的章節中詳細介紹序列。你現在需要知道的是序列只是一個有序的元素集合。

示例(另存為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,那麼這將成為步數。例如,range(1,5,2)給出[1,3]。請記住,範圍擴充套件第二個數,即它包含第二個數。

需要注意的是range()在同一時間產生只有一個號碼,如果你要號碼的完整列表,請撥打list()range(),例如,list(range(5))將導致[0, 1, 2, 3, 4]。列表在資料結構章節中進行了解釋。

for迴圈在這個範圍內進行迭代- for i in range(1,5)相當於for i in [1, 2, 3, 4]其是像在時間分配所述序列中的每個數(或物件)至i,一個,然後執行語句的塊對的每個值i。在這種情況下,我們只打印語句塊中的值。

請記住,該else部分是可選的。包含時,for除非遇到break語句,否則它總是在迴圈結束後執行一次。

請記住,for..in迴圈適用於任何序列。這裡,我們有一個由內建range函式生成的數字列表,但一般來說我們可以使用任何型別的物件的任何型別的序列!我們將在後面的章節中詳細探討這個想法。

或如果這個變數是一個數組時我們也可以這樣寫

C / C ++ / Java / C#程式設計師注意事項

Python for迴圈與C / C ++ for迴圈完全不同。C#程式設計師會注意到forPython 中的迴圈類似於foreachC#中的迴圈。Java程式設計師會注意到它與for (int i : IntArray)Java 1.5中的相似。

在C / C ++中,如果你想寫for (int i = 0; i < 5; i++),那麼在Python中你只需編寫for i in range(0,5)。正如您所看到的,for迴圈更簡單,更具表現力,並且在Python中不易出錯。

休息宣告

break語句用於中斷迴圈語句,即停止執行迴圈語句,即使迴圈條件尚未變為False或專案序列尚未完全迭代。

一個重要的註釋是,如果你打破了一個forwhile迴圈,任何對應的迴圈else是塊執行。

示例(另存為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 11
Enter something : quit
Done

這個怎麼運作

在這個程式中,我們反覆取使用者的輸入並每次列印每個輸入的長度。我們提供了一個特殊條件來通過檢查使用者輸入是否來停止程式 'quit'。我們通過突破迴圈併到達程式結束來停止程式。

可以使用內建len函式找到輸入字串的長度。

請記住,該break語句也可以與for迴圈一起使用。

Swaroop的Poetic Python

我在這裡使用的輸入是我寫的一首小詩:

Programming is fun
When the work is done
if you wanna make your work also fun:
    use Python!

continue宣告

continue語句用於告訴Python跳過當前迴圈塊中的其餘語句並繼續迴圈的下一次迭代。

示例(另存為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 continue.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迴圈。

摘要

我們已經看到了如何使用三種控制流語句- ifwhile以及for與其相關的一起breakcontinue報表。這些是Python中最常用的部分,因此,對它們感到滿意是至關重要的。

接下來,我們將看到如何建立和使用函式。

輸出:

$ 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

這個怎麼運作

在這個程式中,我們從使用者那裡猜測並檢查它是否是我們擁有的數字。我們將變數設定為number我們想要的任何整數23。然後,我們使用該input()功能進行使用者的猜測。功能只是可重複使用的程式。我們將在下一章中詳細介紹它們。

我們為內建input函式提供一個字串,將其列印到螢幕上並等待使用者輸入。輸入內容並按kbd:[enter]鍵後,該input()函式將返回我們輸入的內容,作為字串。然後,我們將此字串轉換為整數int,然後將其儲存在變數中guess。實際上,這int是一個類,但您現在需要知道的是,您可以使用它將字串轉換為整數(假設字串在文字中包含有效的整數)。

接下來,我們將使用者的猜測與我們選擇的數字進行比較。如果它們相等,我們會列印成功訊息。請注意,我們使用縮排級別來告訴Python哪些語句屬於哪個塊。這就是縮排在Python中如此重要的原因。我希望你堅持“一致的縮排”規則。你是?

注意if語句最後是如何包含冒號的 - 我們向Python指出後面是一個語句塊。

然後,我們檢查猜測是否小於數字,如果是,我們通知使用者他們必須猜測比這更高一點。我們在這裡使用的是elif實際將兩個相關if else-if else語句組合成一個組合if-elif-else語句的子句。這使程式更容易,減少了所需的縮排量。

elifelse語句也必須有(當然與適當的縮排,)在邏輯行隨後的語句其對應的塊的端部的結腸

您可以在if語句的if塊中包含另一個if語句,依此類推 - 這稱為巢狀if語句。

請記住,elifelse部分是可選的。最小的有效if宣告是:

if True:
    print('Yes, it is true')

在Python完成執行完整if語句以及關聯的elifelse子句之後,它將繼續執行包含該if語句的塊中的下一個語句。在這種情況下,它是主塊(程式的執行開始),下一個語句是print('Done')語句。在此之後,Python會看到程式的結尾並完成。

即使這是一個非常簡單的程式,我也指出了很多你應該注意到的事情。所有這些都非常簡單(對於那些來自C / C ++背景的人來說非常簡單)。你最初需要了解所有這些事情,但經過一些練習後你會對它們感到滿意,而且對你來說都會感覺“自然”。

C / C ++程式設計師注意事項

switchPython中沒有宣告。您可以使用if..elif..else語句執行相同的操作(在某些情況下,使用字典快速執行)

while宣告

while只要條件為真,該語句允許您重複執行語句塊。一個while說法是所謂的一個例子迴圈語句。一個while語句可以有一個可選的else條款。

示例(另存為while.py):

number = 23
running = True

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

    if guess == number:
        print('Congratulations, you guessed it.')
        # this causes the while loop to stop
        running = False
    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陳述的使用。

我們移動inputif語句內部while迴圈和變數設定runningTruewhile迴圈之前。首先,我們檢查變數running是否True然後繼續執行相應的while-block。在執行該塊之後,再次檢查條件,在這種情況下是running變數。如果是,我們再次執行while-block,否則我們繼續執行可選的else-block,然後繼續執行下一個語句。

elsewhile迴圈條件變為時執行該塊False- 這甚至可能是第一次檢查條件。如果有else一個while迴圈的子句,它總是被執行,除非你用一個break語句中斷迴圈。

TrueFalse被稱為布林型別,你可以認為他們是等同於價值10分別。

C / C ++程式設計師注意事項

請記住,您可以elsewhile迴圈建立一個子句。

for

for..in語句是另一個迴圈語句,它迭代一系列物件,即遍歷序列中的每個專案。我們將在後面的章節中詳細介紹序列。你現在需要知道的是序列只是一個有序的專案集合。

示例(另存為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,那麼這將成為步數。例如,range(1,5,2)給出[1,3]。請記住,範圍擴充套件第二個數,即它包含第二個數。

需要注意的是range()在同一時間產生只有一個號碼,如果你要號碼的完整列表,請撥打list()range(),例如,list(range(5))將導致[0, 1, 2, 3, 4]。列表在資料結構章節中進行了解釋。

for迴圈在這個範圍內進行迭代- for i in range(1,5)相當於for i in [1, 2, 3, 4]其是像在時間分配所述序列中的每個數(或物件)至i,一個,然後執行語句的塊對的每個值i。在這種情況下,我們只打印語句塊中的值。

請記住,該else部分是可選的。包含時,for除非遇到break語句,否則它總是在迴圈結束後執行一次。

請記住,for..in迴圈適用於任何序列。這裡,我們有一個由內建range函式生成的數字列表,但一般來說我們可以使用任何型別的物件的任何型別的序列!我們將在後面的章節中詳細探討這個想法。

C / C ++ / Java / C#程式設計師注意事項

Python for迴圈與C / C ++ for迴圈完全不同。C#程式設計師會注意到forPython 中的迴圈類似於foreachC#中的迴圈。Java程式設計師會注意到它與for (int i : IntArray)Java 1.5中的相似。

在C / C ++中,如果你想寫for (int i = 0; i < 5; i++),那麼在Python中你只需編寫for i in range(0,5)。正如您所看到的,for迴圈更簡單,更具表現力,並且在Python中不易出錯。

休息宣告

break語句用於中斷迴圈語句,即停止執行迴圈語句,即使迴圈條件尚未變為False或專案序列尚未完全迭代。

一個重要的註釋是,如果你打破了一個forwhile迴圈,任何對應的迴圈else是塊執行。

示例(另存為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 11
Enter something : quit
Done

這個怎麼運作

在這個程式中,我們反覆取使用者的輸入並每次列印每個輸入的長度。我們提供了一個特殊條件來通過檢查使用者輸入是否來停止程式 'quit'。我們通過突破迴圈併到達程式結束來停止程式。

可以使用內建len函式找到輸入字串的長度。

請記住,該break語句也可以與for迴圈一起使用。

Swaroop的Poetic Python

我在這裡使用的輸入是我寫的一首小詩:

Programming is fun
When the work is done
if you wanna make your work also fun:
    use Python!

continue宣告

continue語句用於告訴Python跳過當前迴圈塊中的其餘語句並繼續迴圈的下一次迭代。

示例(另存為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 continue.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迴圈。

摘要

我們已經看到了如何使用三種控制流語句- ifwhile以及for與其相關的一起breakcontinue報表。這些是Python中最常用的部分,因此,對它們感到滿意是至關重要的。

接下來,我們將看到如何建立和使用函式。

注意:每個判斷條件都以 : 為結束,表示開始當前block,下一行行首以四個空格或一個Tab鍵縮排為當前block內容。

        在書寫習慣上我建議在每行的行位都加上 ; 表示結束,以此養成一個良好的編碼習慣