在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ 控制流
備份腳本——版本四
使用 <strong>init</strong> 方法
控制流
異常
表 15.1 一些特殊的方法
如何創(chuàng)建你自己的模塊
使用字典
前言
使用默認(rèn)參數(shù)值
表 5.1 運(yùn)算符與它們的用法
解決問題——編寫一個(gè) Python 腳本
使用 for 語句
使用 continue 語句
使用元組輸出
對(duì)象與參考
使用函數(shù)形參
使用默認(rèn)參數(shù)值
使用 if 語句
如何引發(fā)異常
使用源文件
使用對(duì)象的方法
使用表達(dá)式
定義函數(shù)
使用局部變量
使用列表綜合
使用 sys.argv
使用 lambda 形式
使用 global 語句
備份腳本——版本二
使用列表
使用 while 語句
備份腳本——版本一
使用元組
輸入/輸出
使用類與對(duì)象的變量
使用 sys 模塊
表 5.2 運(yùn)算符優(yōu)先級(jí)
處理異常
使用 break 語句
函數(shù)
基本概念
運(yùn)算符與表達(dá)式
介紹
使用文件
使用序列
接下來學(xué)習(xí)什么?
使用帶提示符的 Python 解釋器
使用 DocStrings
使用字面意義上的語句
最初的步驟
數(shù)據(jù)結(jié)構(gòu)
儲(chǔ)存與取儲(chǔ)存
使用 dir 函數(shù)
模塊
Python 標(biāo)準(zhǔn)庫
備份腳本——版本三(不工作?。?/span>
創(chuàng)建一個(gè)類
安裝 Python
面向?qū)ο蟮木幊?/span>
使用模塊的<strong>name</strong>
使用變量和字面意義上的常量
使用繼承

控制流

簡(jiǎn)介

在到目前為止我們所見到的程序中,總是有一系列的語句,Python 忠實(shí)地按照它們的順序執(zhí)行它們。如果你想要改變語句流的執(zhí)行順序,該怎么辦呢?例如,你想要讓程序做一些決定,根據(jù)不同的情況做不同的事情,例如根據(jù)時(shí)間打印“早上好”或者“晚上好”。

你可能已經(jīng)猜到了,這是通過控制流語句實(shí)現(xiàn)的。在 Python 中有三種控制流語句—— if、for 和 while。

if 語句

if 語句用來檢驗(yàn)一個(gè)條件, 如果 條件為真,我們運(yùn)行一塊語句(稱為 if-塊 ), 否則 我們處理另外一塊語句(稱為 else-塊 )。 else 從句是可選的。

使用 if 語句

例 6.1 使用 if 語句


    #!/usr/bin/python
    # Filename: if.py 

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

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

    print 'Done'
    # This last statement is always executed, after the if statement is executed

(源文件:code/if.py

輸出


    $ 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

它如何工作

在這個(gè)程序中,我們從用戶處得到猜測(cè)的數(shù),然后檢驗(yàn)這個(gè)數(shù)是否是我們手中的那個(gè)。我們把變量 number 設(shè)置為我們想要的任何整數(shù),在這個(gè)例子中是 23。然后,我們使用 raw_input()函數(shù)取得用戶猜測(cè)的數(shù)字。函數(shù)只是重用的程序段。我們將在下一章學(xué)習(xí)更多關(guān)于函數(shù)的知識(shí)。

我們?yōu)閮?nèi)建的 raw_input 函數(shù)提供一個(gè)字符串,這個(gè)字符串被打印在屏幕上,然后等待用戶的輸入。一旦我們輸入一些東西,然后按回車鍵之后,函數(shù)返回輸入。對(duì)于 raw_input 函數(shù)來說是一個(gè)字符串。我們通過 int 把這個(gè)字符串轉(zhuǎn)換為整數(shù),并把它存儲(chǔ)在變量 guess 中。事實(shí)上,int 是一個(gè)類,不過你想在對(duì)它所需了解的只是它把一個(gè)字符串轉(zhuǎn)換為一個(gè)整數(shù)(假設(shè)這個(gè)字符串含有一個(gè)有效的整數(shù)文本信息)。

接下來,我們將用戶的猜測(cè)與我們選擇的數(shù)做比較。如果他們相等,我們打印一個(gè)成功的消息。注意我們使用了縮進(jìn)層次來告訴 Python 每個(gè)語句分別屬于哪一個(gè)塊。這就是為什么縮進(jìn)在 Python 如此重要的原因。我希望你能夠堅(jiān)持“每個(gè)縮進(jìn)層一個(gè)制表符”的規(guī)則。你是這樣的嗎?

注意 if 語句在結(jié)尾處包含一個(gè)冒號(hào)——我們通過它告訴 Python 下面跟著一個(gè)語句塊。

然后,我們檢驗(yàn)猜測(cè)是否小于我們的數(shù),如果是這樣的,我們告訴用戶它的猜測(cè)大了一點(diǎn)。我們?cè)谶@里使用的是 elif 從句,它事實(shí)上把兩個(gè)相關(guān)聯(lián)的 if else-if else 語句合并為一個(gè) if-elif-else 語句。這使得程序更加簡(jiǎn)單,并且減少了所需的縮進(jìn)數(shù)量。

elif 和 else 從句都必須在邏輯行結(jié)尾處有一個(gè)冒號(hào),下面跟著一個(gè)相應(yīng)的語句塊(當(dāng)然還包括正確的縮進(jìn))。

你也可以在一個(gè) if 塊中使用另外一個(gè) if 語句,等等——這被稱為嵌套的 if 語句。

記住,elif 和 else 部分是可選的。一個(gè)最簡(jiǎn)單的有效 if 語句是:


    if True:
        print 'Yes, it is true'

在 Python 執(zhí)行完一個(gè)完整的 if 語句以及與它相關(guān)聯(lián)的 elif 和 else 從句之后,它移向 if 語句塊的下一個(gè)語句。在這個(gè)例子中,這個(gè)語句塊是主塊。程序從主塊開始執(zhí)行,而下一個(gè)語句是 print 'Done'語句。在這之后,Python 看到程序的結(jié)尾,簡(jiǎn)單的結(jié)束運(yùn)行。

盡管這是一個(gè)非常簡(jiǎn)單的程序,但是我已經(jīng)在這個(gè)簡(jiǎn)單的程序中指出了許多你應(yīng)該注意的地方。所有這些都是十分直接了當(dāng)?shù)模▽?duì)于那些擁有 C/C++背景的用戶來說是尤為簡(jiǎn)單的)。它們?cè)陂_始時(shí)會(huì)引起你的注意,但是以后你會(huì)對(duì)它們感到熟悉、“自然”。

給C/C++程序員的注釋
在 Python 中沒有 switch 語句。你可以使用 if..elif..else 語句來完成同樣的工作(在某些場(chǎng)合,使用字典會(huì)更加快捷。)

while 語句

只要在一個(gè)條件為真的情況下,while 語句允許你重復(fù)執(zhí)行一塊語句。while 語句是所謂 循環(huán) 語句的一個(gè)例子。while 語句有一個(gè)可選的 else 從句。

使用 while 語句

例 6.2 使用 while 語句


    #!/usr/bin/python
    # Filename: while.py

    number = 23
    running = True

    while running:
    guess = int(raw_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'

(源文件:code/while.py

輸出


    $ 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

它如何工作

在這個(gè)程序中,我們?nèi)匀皇褂昧瞬聰?shù)游戲作為例子,但是這個(gè)例子的優(yōu)勢(shì)在于用戶可以不斷的猜數(shù),直到他猜對(duì)為止——這樣就不需要像前面那個(gè)例子那樣為每次猜測(cè)重復(fù)執(zhí)行一遍程序。這個(gè)例子恰當(dāng)?shù)卣f明了 while 語句的使用。

我們把 raw_input 和 if 語句移到了 while 循環(huán)內(nèi),并且在 while 循環(huán)開始前把 running 變量設(shè)置為 True。首先,我們檢驗(yàn)變量 running 是否為 True,然后執(zhí)行后面的 while-塊 。在執(zhí)行了這塊程序之后,再次檢驗(yàn)條件,在這個(gè)例子中,條件是 running 變量。如果它是真的,我們?cè)俅螆?zhí)行 while-塊,否則,我們繼續(xù)執(zhí)行可選的 else-塊,并接著執(zhí)行下一個(gè)語句。

當(dāng) while 循環(huán)條件變?yōu)?False 的時(shí)候,else 塊才被執(zhí)行——這甚至也可能是在條件第一次被檢驗(yàn)的時(shí)候。如果 while 循環(huán)有一個(gè) else 從句,它將始終被執(zhí)行,除非你的 while 循環(huán)將永遠(yuǎn)循環(huán)下去不會(huì)結(jié)束!

True 和 False 被稱為布爾類型。你可以分別把它們等效地理解為值 1 和 0。在檢驗(yàn)重要條件的時(shí)候,布爾類型十分重要,它們并不是真實(shí)的值 1。

else 塊事實(shí)上是多余的,因?yàn)槟憧梢园哑渲械恼Z句放在同一塊(與 while 相同)中,跟在 while 語句之后,這樣可以取得相同的效果。

給 C/C++程序員的注釋
記住,你可以在 while 循環(huán)中使用一個(gè) else 從句。

for 循環(huán)

for..in 是另外一個(gè)循環(huán)語句,它在一序列的對(duì)象上 遞歸 即逐一使用隊(duì)列中的每個(gè)項(xiàng)目。我們會(huì)在后面的章節(jié)中更加詳細(xì)地學(xué)習(xí)序列

使用 for 語句

例 6.3 使用 for 語句


    #!/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

它如何工作

在這個(gè)程序中,我們打印了一個(gè) 序列 的數(shù)。我們使用內(nèi)建的 range 函數(shù)生成這個(gè)數(shù)的序列。

我們所做的只是提供兩個(gè)數(shù),range 返回一個(gè)序列的數(shù)。這個(gè)序列從第一個(gè)數(shù)開始到第二個(gè)數(shù)為止。例如,range(1,5)給出序列[1, 2, 3, 4]。默認(rèn)地,range 的步長(zhǎng)為 1。如果我們?yōu)閞ange 提供第三個(gè)數(shù),那么它將成為步長(zhǎng)。例如,range(1,5,2)給出[1,3]。記住,range 向上 延伸到第二個(gè)數(shù),即它包含第二個(gè)數(shù)。

for 循環(huán)在這個(gè)范圍內(nèi)遞歸—— for i in range(1,5)等價(jià)于 for i in [1, 2, 3, 4],這就如同把序列中的每個(gè)數(shù)(或?qū)ο螅┵x值給 i,一次一個(gè),然后以每個(gè) i 的值執(zhí)行這個(gè)程序塊。在這個(gè)例子中,我們只是打印 i 的值。

記住,else 部分是可選的。如果包含 else,它總是在 for 循環(huán)結(jié)束后執(zhí)行一次,除非遇到 break 語句。

記住,for..in 循環(huán)對(duì)于任何序列都適用。這里我們使用的是一個(gè)由內(nèi)建 range 函數(shù)生成的數(shù)的列表,但是廣義說來我們可以使用任何種類的由任何對(duì)象組成的序列!我們會(huì)在后面的章節(jié)中詳細(xì)探索這個(gè)觀點(diǎn)。

給 C/C++/Java/C#程序員的注釋
Python 的 for 循環(huán)從根本上不同于 C/C++的 for 循環(huán)。C#程序員會(huì)注意到 Python 的 for 循環(huán)與 C#中的 foreach 循環(huán)十分類似。Java 程序員會(huì)注意到它與 Java 1.5 中的 for (int i : IntArray)相似。 在 C/C++中,如果你想要寫 for (int i = 0; i < 5; i++),那么用 Python,你寫成 for i in range(0,5)。你會(huì)注意到,Python 的 for 循環(huán)更加簡(jiǎn)單、明白、不易出錯(cuò)。

break 語句

break 語句是用來 終止 循環(huán)語句的,即哪怕循環(huán)條件沒有稱為 False 或序列還沒有被完全遞歸,也停止執(zhí)行循環(huán)語句。

一個(gè)重要的注釋是,如果你從 for 或 while 循環(huán)中 終止 ,任何對(duì)應(yīng)的循環(huán) else 塊將執(zhí)行。

使用 break 語句

例 6.4 使用 break 語句


    #!/usr/bin/python
    # Filename: break.py

    while True:
    s = raw_input('Enter something : ')
    if s == 'quit':
    break
    print 'Length of the string is', len(s)
    print 'Done'

(源文件:code/break.py

輸出


    $ 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

它如何工作

在這個(gè)程序中,我們反復(fù)地取得用戶地輸入,然后打印每次輸入地長(zhǎng)度。我們提供了一個(gè)特別的條件來停止程序,即檢驗(yàn)用戶的輸入是否是'quit'。通過 終止 循環(huán)到達(dá)程序結(jié)尾來停止程序。

輸入字符串的長(zhǎng)度通過內(nèi)建的 len 函數(shù)取得。

記住,break 語句也可以在 for 循環(huán)中使用。

G2 的 Python 詩

我在這里輸入的是我所寫的一段小詩,稱為 G2 的 Python 詩


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

continue 語句

continue 語句被用來告訴 Python 跳過當(dāng)前循環(huán)塊中的剩余語句,然后 繼續(xù) 進(jìn)行下一輪循環(huán)。

使用 continue 語句

例 6.5 使用 continue 語句


    #!/usr/bin/python
    # Filename: continue.py

    while True:
        s = raw_input('Enter something : ')
        if s == 'quit':
            break
        if len(s) < 3:
            continue
    print 'Input is of sufficient length'
    # Do other kinds of processing here...

(源文件:code/continue.py

輸出


    $ python continue.py
    Enter something : a
    Enter something : 12
    Enter something : abc
    Input is of sufficient length
    Enter something : quit

它如何工作

在這個(gè)程序中,我們從用戶處取得輸入,但是我們僅僅當(dāng)它們有至少 3 個(gè)字符長(zhǎng)的時(shí)候才處理它們。所以,我們使用內(nèi)建的 len 函數(shù)來取得長(zhǎng)度。如果長(zhǎng)度小于 3,我們將使用 continue 語句忽略塊中的剩余的語句。否則,這個(gè)循環(huán)中的剩余語句將被執(zhí)行,我們可以在這里做我們希望的任何處理。

注意,continue 語句對(duì)于 for 循環(huán)也有效。

概括

我們已經(jīng)學(xué)習(xí)了如何使用三種控制流語句—— if、while 和 for 以及與它們相關(guān)的 break 和 continue 語句。它們是 Python 中最常用的部分,熟悉這些控制流是應(yīng)當(dāng)掌握的基本技能。

接下來,我們將學(xué)習(xí)如何創(chuàng)建和使用函數(shù)。