循序漸進學Python:三種選擇語句

來源:互聯網
上載者:User

本文將詳細介紹Python語言中的三種選擇語句:if語句,if/else語句和if/elif/else語句。對於每種語句,我們都提供了相應的流程圖。與此同時,我們給出許多簡單的樣本程式,以協助讀者加深理解。

一、程式的控制結構

對於Python程式中的執行語句,預設時是按照書寫順序依次執行的,這時我們說這樣的語句是順序結構的。但是,僅有順序結構還是不夠的,因為有時候我們需要根據特定的情況,有選擇地執行某些語句,這時我們就需要一種選擇結構的語句。另外,有時候我們還可以在給定條件下往複執行某些語句,這時我們稱這些語句是迴圈結構的。有了這三種基本的結構,我們就能夠構建任意複雜的程式了。
對本文來說,我們要討論的是三種基本程式結構中的選擇結構,它們分別用if語句、if/else語句和if/elif/else語句實現。至於其它兩種控制結構,我們會在後續的文章中陸續加以介紹。下面我們首先介紹if語句。

二、if語句

Python的if語句的功能跟其他語言的非常相似,都是用來判定給出的條件是否滿足,然後根據判斷的結果(即真或假)決定是否執行給出的操作。If語句是一種單選結構,它選擇的是做與不做。它是由三部分組成:關鍵字if本身、測試條件真假的運算式(我們簡稱為條件運算式)和運算式結果為真(即運算式的值為非零)時要執行的代碼。If語句的文法形式如下所示:

if 運算式 :
語句體

if語句的流程圖如下所示:

圖1 if語句的流程

注意,if語句的語句體只有當條件運算式的值為真,即非零時,才會執行;否則的話,程式就會直接跳過這個語句體,去執行緊跟在這個語句體之後的語句。我們這裡的語句體,既可以包含多條語句,也可以只有一條語句組成,但是語句體由多條語句組成時,要有統一的縮排形式,否則就會出現邏輯錯誤,即語法檢查沒錯,但是結果卻非預期。

現在我們用一個樣本程式來示範一下if語句的用法。我們的程式很簡單的,只要使用者輸入一個整數,如果這個數字大於6,那麼就輸出一行字串;否則,直接退出程式。代碼如下所示:

# -*- coding: cp936 -*-

#比較輸入的整數是否大於6

integer = raw_input('請輸入一個整數:') #取得一個字串
integer = int(integer) #將字串轉換為整數
if integer > 6:
print '%d 大於6' %integer

當我們在IDEL中運行該程式時,結果如下所示:

圖2 if語句樣本程式運行結果

我們看到,如果輸入的數字不大於6時,程式馬上退出,也就是說,下列代碼

print '%d 大於6' %integer

並沒有執行;如果輸入的數字大於6,才會執行上面的這行代碼,以列印一行文字。

三、if/else語句

上面的if語句是一種單選結構,也就是說,如果條件為真(即運算式的值為非零),那麼執行指定的操作;否則就會跳過該操作。所以,它選擇的是做與不做的問題。而if/else語句是一種雙選結構,它選擇的不是做與不做的問題,而是在兩種備選行動中選擇哪一個的問題。if/else語句由五部分組成:關鍵字if、測試條件真假的運算式、運算式結果為真(即運算式的值為非零)時要執行的代碼,以及關鍵字else和運算式結果為假(即運算式的值為零)時要執行的代碼。if/else語句的文法形式如下所示:

if 運算式 :
語句體1
else :
語句體2

if/else語句的流程如下所示:

圖3 if/else語句的流程

從if/else語句的流程中可以輕易看出,當條件為真(即運算式的值為非零)時,執行語句體1;當條件為假(即運算式的值為零)時,執行語句體2——也就是說,條件無論真假,它總要在兩個語句體中選擇一個執行,雙選結構之稱謂由此而來。

下面我們對上面的樣本程式進行修改,以示範if/else語句的使用方法。我們的程式很簡單的,只要使用者輸入一個整數,如果這個數字大於6,那麼就輸出一行資訊,指出輸入的數字大於6;否則,輸出另一行字串,指出輸入的數字小於等於6。代碼如下所示:

# -*- coding: cp936 -*-
#比較輸入的整數是否大於6
integer = raw_input('請輸入一個整數:') #取得一個字串
integer = int(integer) #將字串轉換為整數
if integer > 6:
print '%d 大於6' %integer
else:
print '%d 小於或等於6' %integer

當我們在IDEL中運行該程式時,結果如下所示:

圖4 if/else語句樣本程式運行結果

我們看到,當輸入的數字小於3,即條件運算式為假時,執行else字句中的列印語句:
print '%d 小於或等於6' %integer

當輸入的數字小於3,即條件運算式為假時,執行else字句中的列印語句:
print '%d 大於6' %integer

但是無論如何,它總得在這兩個列印語句中挑一個執行,它不可能兩個都跳過。

四、if/elif/else語句

有時候,我們需要在多組動作中選擇一組執行,這時就會用到多選結構,對於Python語言來說就是if/elif/else語句。該語句可以利用一系列條件運算式進行檢查,並在某個運算式為真的情況下執行相應的代碼。需要注意的是,雖然if/elif/else語句的備選動作較多,但是有且只有一組動作被執行,該語句的文法形式如下所示:

if 運算式1 :
語句體1
elif 運算式2 :
語句體2
……
elif 運算式m :
語句體m
else :
語句體n

注意,最後一個elif子句之後的else子句沒有進行條件判斷,它實際上處理跟前面所有條件都不匹配的情況,所以通常將else語句所處理的條件稱為預設條件,所以else字句必須放在最後。if/elif/else語句的如下所示:

圖5 if/elif/else語句的

下面我們繼續對上面的樣本程式進行修改,以示範if/elif/else語句的使用方法。我們還是要使用者輸入一個整數,如果這個數字大於6,那麼就輸出一行資訊,指出輸入的數字大於6;如果這個數字小於6,則輸出另一行字串,指出輸入的數字小於6;否則,指出輸入的數字等於6。具體的代碼如下所示:

# -*- coding: cp936 -*-

#比較輸入的整數是否大於6

integer = raw_input('請輸入一個整數:') #取得一個字串
integer = int(integer) #將字串轉換為整數

if integer > 6:
print '%d 大於6' %integer
elif integer < 6:
print '%d 小於6' %integer
else :
print '%d 等於6' %integer

當我們在IDEL中運行該程式時,結果如下所示:

圖6 if/elif/else語句樣本程式運行結果

上面介紹了三種選擇語句的基本用法,接下來我們將介紹這些選擇結構的結合方式,以及使用選擇語句時的注意事項,包括縮排和運算式方面的注意事項。

五、選擇結構的結合方式

一般說來,結構化編程中的三種基本結構:順序結構、選擇結構和迴圈結構的結合方式有兩種,一種是堆疊,另一種是嵌套方式。堆疊比較簡單,它把各種結構一個一個羅列在一起就行了,比如我們可以把一個選擇結構中的if語句跟順序結構堆疊在一起,如下所示:

圖7 順序結構和選擇結構的堆疊

我們看到,因為三種基本結構都是單入口和單出口(通常用一個小圓圈表示),所以堆疊時只要把一個結構的出口串連到另一個結構的入口就行了。至於嵌套組合方式,就是用一種結構替換同種結構中的語句體(我們通常用一個矩形框表示),表示的是把一個選擇結構中的if語句嵌套到另一個if語句中:

圖8 if語句的嵌套

觀察,不難發現,上面的嵌套實際上就是把一個if結構中的語句體(矩形框)替換為另一個if結構。其他結構的嵌套與之類似,在這裡不再一一列舉。

現在舉一個例子來說明嵌套的應用。我們要將使用者輸入的數字跟一個整數進行比較,並輸出比較結果。這本來可以用if/elif/else語句來完成的,但是為了示範選擇結構的嵌套,我們這裡用if/else語句的嵌套來實現,代碼如下所示:

# -*- coding: cp936 -*-

#將輸入的數字跟6進行比較

integer = raw_input('請輸入一個整數:') #取得一個字串
integer = int(integer) #將字串轉換為整數

if integer > 6:
print '%d 大於6' %integer
else:
if integer < 6:
print '%d 小於6' %integer
else:
print '%d 等於6' %integer

當我們在IDEL中運行該程式時,結果如下所示:

圖9 if/else嵌套語句樣本程式運行結果

六、語句體的縮排問題

需要說明的是,嵌套時一定要注意縮排問題。C語言是用花括弧{}來區分語句體,但是Python的語句體是用縮排形式來表示的,如果縮排不正確,會導致邏輯錯誤。舉例來說,如果我們讓使用者輸入一個數字,如果數字為偶數,則列印兩行資訊,一行說明數字除以2餘數為零,另一行說明判斷結果。具體代碼如下所示:

# -*- coding: cp936 -*-

#判斷輸入的數字是否為偶數

integer = raw_input('請輸入一個整數:') #取得一個字串
integer = int(integer) #將字串轉換為整數

if 0 == integer % 2:
print '\n%d 除以2餘數為零;' %integer
print ' 所以,%d 是個偶數' %integer

當我們在IDEL中運行該程式時,結果如下所示:

圖10 正確縮排的結果

如果我們改變上面程式中的if語句的第二條列印語句的縮排形式,比如改為:

if 0 == integer % 2:
print '\n%d 除以2餘數為零;' %integer
print ' 所以,%d 是個偶數' %integer

我們看看運行結果如何:

圖11 錯誤的縮排將導致邏輯錯誤

,這裡出現了明顯的邏輯錯誤。由於Python通過縮排來區分語句體的界限,所以當上例中的第二個列印語句不縮排後,已經在if語句的控制範圍之外,所以無論if語句的條件是否為真,它都會執行。

七、選擇語句中的條件運算式

現在,我們對選擇語句中的條件運算式進行必要的介紹。三種選擇語句中,條件運算式都是必須可少的組成部分。當條件運算式的值為零時,表示條件為假;當條件運算式的值為非零時,表示條件為真。那麼哪些運算式可以作為條件運算式呢?基本上,最常用的是關聯運算式和邏輯運算式,如:
if a == x and b == y :
print ‘a = x, b = y’
除此之外,條件運算式可以是任何數實值型別運算式,甚至字元型也可以:

圖12 用字元作為條件運算式的情形

八、小結
本文詳細介紹了Python中的三種選擇語句。當我們初接觸這些選擇結構的時候,最好多畫流程圖,這對於理解程式的邏輯極有協助。另外,上機實習也是必不可少的,本文中的樣本程式都是在IDEL環境中示範的,有關IDEL的使用方法,讀者可以參考前面的“循序漸進學Python之IDLE篇”一文。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.