Python條件判斷語句詳解:if、else、switch都有了

2021-02-14 大數據DT

if語句用於檢測某個條件是否成立。如果成立,則執行if語句內的程序;否則,跳過if語句,執行後面的內容。if語句的格式如下。

if(表達式): 
    語句1 
else: 
    語句2

if語句的執行過程如下:如果表達式的布爾值為真,則執行語句1;否則,執行語句2。其中的else子句可以省略,表達式兩側的括號也可以省略。在講解if語句之前,先介紹一下Python中的控制臺輸入函數。在C語言中,使用scanf()和getchar()捕獲用戶輸入,而Java語言的System.in包提供了控制臺輸入的方法。Python也提供了類似功能的函數——input(),用於捕獲用戶的原始輸入並將其轉為字符串。input()函數的聲明如下。

input([prompt]) -> string

參數prompt是控制臺中對於輸入的提示文字,提示用戶輸入,返回值為字符串。如果輸入的是數字,返回的還是字符串,那麼使用前需要調用int()做一下字符串和數字類型的轉換。下面這段代碼說明了字符串和數字類型的轉換。

x = input("x:")
x = int(x)
x = x + 1

如果不調用int()把字符串轉換為數字,而直接計算表達式x = x + 1,將提示如下錯誤。

TypeError: Can't convert 'int' object to str implicitly

1# 執行if語句內的程序
2a = input("a:")
3a = int(a)
4b = input("b:")
5b = int(b)
6if(a > b):
7    print (a, " > ", b)

對於第7行代碼,假設a=2、b=1,輸出結果:2>1。如果不滿足if語句內的條件,程序將跳過if語句,執行後面的內容。

1# 跳過if語句
2a = input("a:")
3a = int(a)
4b = input("b:")
5b = int(b)
6if(a > b):
7    print (a, " > ", b)
8print (a, " < ", b)

假設a=1、b=2,第6行代碼中變量a的值小於變量b的值,因此,程序跳轉執行第8行代碼。【例3-1】把上面的代碼改寫成if… else…結構。

1# if… else…語句
2a = input("a:")
3a = int(a)
4b = input("b:")
5b = int(b)
6if(a > b):
7    print (a, " > ", b)
8else:
9    print (a, " < ", b)

假設a=1、b=2,第6行代碼中變量a的值小於變量b的值。因此,程序跳轉到else子句。注意:else子句後需要加一個冒號,使Python解釋器能識別出else子句對應的代碼塊。Java程式設計師可能會不習慣這種語法,往往會忽略else子句後的冒號。在Python 2中還可用raw_input()函數接收用戶輸入,其功能與Python 3的input()相同。而Python 2中的input()接收的值不轉換為字符串類型,而是保留原始類型,它在Python 3中已經去除。if…elif…else語句是對if…else…語句的補充。當程序的條件分支很多時,可以使用這種語句。if…elif…else語句相當於C、Java中的if…elseif…else語句。該語句的格式如下。

if(表達式1): 語句1
elif(表達式2): 語句2

elif(表達式n): 語句n
else: 語句m

if…elif…else語句的執行過程:首先判斷表達式1的值是否為真。如果為真,則執行語句1。否則,程序流轉到elif子句,判斷表達式2的值是否為真。如果表達式2的值為真,則執行語句2。否則,程序進入下面一個elif子句,以此類推。如果所有的表達式都不成立,則程序執行else子句的代碼。其中的else子句可以省略,表達式兩側的括號也可以省略。下面【例3-2】中的這段代碼通過判斷學生的分數,確定學生成績的等級。

1# if elif else語句
2score = float( input("score:"))  # 接收用戶輸入並將其轉換為float類型,當輸入為小數時,使用int轉換會報錯
3if 90 <= score <= 100:
4    print("A")
5elif 80 <= score < 90:
6    print("B")
7elif 60 <= score < 80:
8    print("C")
9else:
10    print("D")

第2行代碼定義了一個變量score,假設輸入的值為70。這個變量表示學生的分數。接收用戶輸入並將其轉換為float類型。第3行代碼,分數大於等於90並且小於等於100,則等級評定為「A」。第5行代碼,分數大於等於80並且小於90,則等級評定為「B」。第7行代碼,分數大於等於60並且小於80,則等級評定為「C」。此時條件表達式成立,程序流轉到第8行。輸出結果為C。第9行代碼,當前面的條件表達式都不成立時,程序流轉到else子句。if語句的嵌套是指if語句中可以包含一個或多個if語句。嵌套的格式如下所示。

if(表達式1):
if(表達式2): 語句1
elif(表達式3): 語句2

else: 語句3
elif(表達式n):

else: 

下面【例3-3】中的這段代碼是一個嵌套的條件語句。如果x的值大於0,則y的值等於1;如果x的值等於0,則y的值等於0;如果x的值小於0,則y的值等於-1。

1x = -1
2y = 99
3if(x >= 0):
4    if(x > 0):#嵌套的if語句
5        y = 1
6    else:
7        y = 0
8else:
9    y = -1
10print ("y =", y)

第2行代碼定義了一個變量y。為了不和最終可能的輸出結果1、0、-1重複,設置y的初始值為99。第3行代碼判斷變量x的值。如果x大於等於0,則執行下面嵌套的if語句。第4行代碼,判讀x的值是否大於0。如果大於0,則執行第5行代碼;否則,執行第7行代碼。第8行代碼,如果變量x的值小於0,則執行第9行代碼。 第9行代碼,由於變量x的值為-1,因此y的值等於-1。嵌套語句可以組合出很多寫法,但是要注意把所有的分支情況都考慮到。下面的這種寫法是錯誤的。

1# 錯誤的嵌套語句
2x = -1
3y = 99
4if(x != 0):           # 如果x不等於0
5    if(x > 0):          #嵌套的if語句
6        y = 1
7else:
8    y = 0
9print ("y =", y)

第4行代碼判斷變量x的值是否等於0。如果不等於0,則執行if語句下面的代碼塊;否則執行else子句的代碼。由於x的值等於-1,程序流轉到第5行。第5行代碼判斷變量x的值是否大於0。如果大於0,則變量y的值設置為1。由於這裡沒有考慮到變量x小於0的情況,所以程序直接跳轉到第9行。第9行代碼,變量y的值並沒有被改變,程序的分支結構沒有考慮到x小於0的情況,所以最終輸出的不是期望中的結果。輸出結果為99。注意:編寫條件語句時,應該儘可能避免使用嵌套語句。嵌套語句不便於閱讀,而且可能會忽略一些可能性。switch語句用於編寫多分支結構的程序,類似於if…elif…else語句。C語言中switch語句的結構如下所示。

switch(表達式) {
    case 常量表達式1: 語句1
    case 常量表達式2: 語句2
    …
    case 常量表達式n: 語句n
    default: 語句m
}

switch語句表示的分支結構比if…elif…else語句更清晰,代碼可讀性更高,但是Python並沒有提供switch語句,而是可以通過字典實現switch語句的功能。實現方法分為兩步。首先,定義一個字典。字典是由鍵值對組成的集合。其次,調用字典的get()獲取相應的表達式。下面【例3-4】中的這段代碼通過算術運算的符號,獲取算術運算表達式。

1# 使用字典實現switch語句
2from __future__ import division# 導入division模塊
3x = 1
4y = 2
5operator = "/"
6result = {         # 定義字典
7"+" : x + y,
8"-" : x - y,
9"*" : x * y,
10"/" : x / y 
11}
12print (result.get(operator))

第5行代碼定義了操作符變量operator,該變量用於存放算術運算符。第6行代碼定義了一個字典result。該字典的key值由「+」「-」「*」「/」四則運算符組成。value值由對應的算術表達式組成。第12行代碼調用get()方法,get()的參數就是變量operator的值。由於operator的值為「/」,因此將執行除法運算。輸出結果為0.5。另一種使用switch分支語句的方案是創建一個switch類,處理程序的流轉。這種實現方法比較複雜,涉及面向對象、for循環、中斷語句、遍歷等知識,實現步驟分為4步。創建一個switch類,該類繼承自Python的祖先類object。調用構造函數__init__()初始化需要匹配的字符串,並定義兩個成員變量value和fall。value用於存放需要匹配的字符串。fall用於記錄是否匹配成功,初始值為False,表示匹配不成功。如果匹配成功,程序向後執行。定義一個match()方法,該方法用於匹配case子句。這裡需要考慮3種情況。首先是匹配成功的情況,其次是匹配失敗的默認case子句,最後是case子句中沒有使用break中斷的情況。重寫__iter__()方法,定義了該方法後才能使switch類用於循環語句中。__iter__()調用match()方法進行匹配,通過yield關鍵字,使函數可以在循環中迭代。此外,調用異常StopIteration中斷循環。Python中的循環都是通過異常StopIteration中斷的。這樣switch類就構造完成了。編寫調用代碼,在for…in…循環中使用switch類。下面【例3-5】中的這段代碼實現了switch語句的功能。

1class switch(object):# 定義switch類
2    def __init__(self, value):# 初始化需要匹配的值value
3        self.value = value
4        self.fall = False           # 如果匹配到的case語句中沒有break,則fall為True
5
6    def __iter__(self):# 定義__iter__()方法
7        yield self.match           # 調用match方法 返回一個生成器
8        raise StopIteration# 用StopIteration 異常來判斷for循環是否結束
9
10    def match(self, *args):   # 模擬case子句的方法
11        if self.fall or not args:   # 如果fall為True,則繼續執行下面的case子句
12                                 # 或case子句沒有匹配項,則流轉到默認分支
13            return True
14        elif self.value in args:    # 匹配成功
15            self.fall = True
16            return True
17        else: # 匹配失敗
18            return False
19
20operator = "+"
21x = 1
22y = 2
23for case in switch(operator):  # switch只能用於for... in...循環中
24    if case('+'):
25        print (x + y)
26        break
27    if case('-'):
28        print (x - y)
29        break
30    if case('*'):
31        print (x * y)
32        break
33    if case('/'):
34        print (x / y)
35        break
36    if case():               # 默認分支
37        print ""

第1行到第18行代碼定義了switch類,定義了__init__()、__iter__()、match()方法。第23行代碼在for…in…循環中調用switch類,變量operator作為switch類的參數傳遞給構造函數。變量operator的值等於「+」,程序流轉到第24行。第26行代碼使用break語句中斷switch分支結構,程序流轉到文件的末尾。注意:switch語句會造成代碼不易維護,使源文件臃腫。面向對象的設計中常常對switch語句進行重構,把switch語句分解為若干個類。當然,對於分支流程簡單的switch,可以使用字典來實現。使用字典更容易管理switch,而switch類回到了C、Java的老路上,而且寫法更複雜了,不值得推薦。

關於作者:黃傳祿,高級講師、管理軟體開發工程師、資料庫庫系統工程師、信息系統管理工程師。有10多年的一線教學經驗和高端培訓經驗,出版多部技術專著,獲得多個軟體著作權。

本文摘編自《零基礎學Python》(第2版),經出版方授權發布。推薦語:為了能夠使廣大讀者既能夠掌握Python語言的基礎知識,又能夠將Python語言應用於某個特定的領域(如Web開發),本書介紹了與Python相關的方方面面,每個章節都提供了詳盡的例子,結合實例講解各個知識點。涉及的程序代碼都給出了詳細的注釋,有助於讀者輕鬆領會程序開發的精髓,快速提高開發技能。

相關焦點

  • Python if else條件語句詳解
    這時候程序就需要做出判斷,看用戶是否是成年人,並給出提示。在 Python 中,可以使用 if else 語句對條件進行判斷,然後根據不同的結果執行不同的代碼,這稱為選擇結構或者分支結構。Python 中的 if else 語句可以細分為三種形式,分別是 if 語句、if else 語句和 if elif else 語句,它們的語法和執行流程如表1所示。
  • python學習筆記:條件語句IF
    ': # 判斷變量是否為 python print('welcome boss') # 並輸出歡迎信息else: print(name) # 條件不成立時輸出變量名稱
  • [GO語言基礎] 五.順序控制語句和條件控制語句(if、else、switch)
    else { 執行代碼塊n}說明:先判斷條件表達式1是否成立,如果為True,就執行代碼塊1如果條件表達式1為False,就去判斷條件表達式2是否成立,如果條件表達式2成立,就執行代碼塊2依次類推,如果所有的條件表達式不成立,就執行else語句塊else不是必須的注意:多分支語句只能有一個執行入口
  • switch和if else語句到底用誰
    大家都知道在Java中一共有兩種選擇語句分別是switch與if語句,但究竟什麼時候用?用哪一種好呢?這一直是大家心中的一個小疑慮。現在簡單的回顧switch與if語句的基本構造,再深入了解它們的使用區別。
  • Python 為什麼不支持 switch 語句?
    大多數語言都提供了 switch 語句或者極其相似的東西,例如,在 C/C++/Java /Go 等靜態語言中,它們都支持 switch-case 結構;在 Ruby 中有類似的 case-when 結構,在 Shell 語言中,有相似的 case-in 結構,在 Perl 中,有 switch-case-else……switch 語句的好處是支持「單條件多分支」的選擇結構
  • 魅力python——if-elif-else語句
    小夥伴們大家好,今天我們一起來學習python的條件判斷——if語句。計算機能自動完成許多工作,整個過程不需要人為的參與,幹涉計算機的工作。自動化的發展,解放了人類的雙手,提高了生產力,提高了人類的生活質量。
  • 如何學python-第六課 流程控制-IF,ELSE,條件語句
    今天,我們會把上節課學到的東西與 if、else結合起來使用。條件判斷語句條件判斷語句會根據語句內容返回True或者False.我們上篇文章裡使用的某些語句就是條件判斷語句。如果接下來的內容讓你感到困惑,我建議你去複習一下上一篇文章。老規矩,我們還是先看看代碼:這裡這些語句就叫做『條件判斷語句』。
  • 條件測試語句(2)——if、else搭配使用
    上節練習詳解:上節練習中,我們提到了如果輸入不是C或者F時應該怎麼辦?其實我們完全可以再設置一個條件語句,當我們檢查到輸入不是C或者F時,我們就輸出一個提示錯誤的符號就可以了:在上一講的內容中,我們對if條件語句做了一些基本的介紹。我們經常需要在條件測試通過的時候執行一個操作,並在沒有通過時執行另外一個操作:在這種情況下,我們就可以使用python提供的if-else語句。if—else語句塊類似於簡單的if語句,但是其中的else語句讓我們能夠指定條件未通過時要執行的操作。
  • Python基礎教程判斷(if)語句
    開發中的應用場景生活中的判斷幾乎是無所不在的,我們每天都在做各種各樣的選擇,如果這樣?如果那樣?……程序中的判斷```python if 今天發工資: 先還信用卡的錢 if 有剩餘: 又可以happy了,O(∩_∩)O哈哈~ else
  • Python每天一分鐘:pass與assert語句詳解
    今天為大家介紹的是python中兩個經典的語句:pass語句和assert語句!請注意我們這裡用的修飾詞是語句,表明其使用方式類似if,else,for等這樣的修飾語句,而不是函數。python中的pass和assert語句pass語句詳解很多程式語言都提供了「空語句」支持,如C/C++/JAVA
  • python條件判斷語句
    python輸入語句 大家已經練習完了輸出之後呢,我們來繼續看一下輸入語句的用法 input後面加上提示輸入的語句,就可以獲取用戶輸入的語句 舉個小例子: 我們輸入123456後按回車,即可成功輸入
  • Python中switch語句怎麼用,問愣了很多人
    今天我們來聊聊switch,斷斷續續的,學習Python編程已經學習很久了,最近要用到分支語句,就習慣性的想到了,switch-case語句,這個在大部分主流程式語言中都有,如C,C++,C#,Java等等。但是作為python編程愛好者的我,竟然剛剛才發現python語言中居然沒有switch-case語句!!
  • Python 入門系列 —— 25. 條件判斷詳解
    python 條件和if語句 python 支持常用的數學上的邏輯運算,比如:這些邏輯判斷能用在很多地方,最常用的就是 if語句 中,如下例子所示:a = 33b = 200if b > a:if繼續判斷,如下代碼所示:a = 33b = 33if b > a:  print("b is greater than a")elif a == b:  print("a and b are equal")PS E:\dreams\dream\markdown\python
  • 如果 (If) | Python 中的條件控制語句詳解
    條件控制語句,包括 if 語句、if - else 語句、if - elif - else 語句、以及 if - elif (多個elif) - else 語句,下面我們通過案例逐一演示。if 語句if 語句,僅有一個判斷條件,如果條件成立(為 True),則執行判斷語句後帶縮進的代碼邏輯,否則不執行。
  • Python學習筆記:條件語句if、elif與else
    if語句中包含三種條件判斷句式,即if、elif和else。其中,if與elif部分都包含判斷條件,當判斷條件都不成立時,程序才能執行else部分的代碼。if語句最基礎的形式是if-else,其基本語法格式如下。if-else語句常用的參數及說明如表 1所示。
  • JavaScript 條件語句if、switch-初級web前端工程師必學
    本文介紹可以改變語句默認執行順序的條件語句、循環語句和跳轉語句腳本的威力體現在它們可以根據人們給出的各種條件做出決策,javascript使用條件語句來做判斷,條件語句(conditianal statement)通過判斷表達式的值來決定執行還是跳過某些語句,包括if語句和switch語句if語句
  • 編程入門第六課,交換語句(switch,case)
    其實來說交換語句(switch,case)完全可以通過條件語句(if)來替代,不過使用交換語句可以有更高的執行效率,還可以讓代碼結構看起來更加清晰,所以如果情況適合的時候福哥還是推薦使用交換語句來編寫代碼2.
  • Python基礎知識儲備,if-elif-else語句綜合應用,新手使用教程 - IT...
    python開發Python 中條件選擇語句的第三種形式:if-elif-else,對於前面介紹的 if 分支語句,執行過程非常簡單,判斷 if 語句中的表達式是否為True真,如果為True程序就會執行 if 語句下面的代碼塊,if語句中的判斷結果為False假,就會依次判斷 elif 語句中的表達式,如果為True真,程序就會執行 elif 中的代碼塊……(if語句之後可以有任意數量的elif語句)如果前面所有條件都為False假,程序就會執行 else語句下面的代碼塊,else語句最多只可以有一個語句。
  • Python中的IF條件判斷語句
    # if條件判斷:if根據提供的條件進行判定,如果為真,則執行if後面的語句,反之不執行# if作為基本的流程判斷單元,使程序更靈活# Python 中的 if else 語句可以細分為三種形式,分別是
  • 為什麼Python中沒有switch語句?
    作者:pydanny原文:http://www.pydanny.com/why-doesnt-python-have-switch-case.html