[Python基礎教程] 第3章 - if/else 判斷語句

2022-01-25 KAI Square

本章知識點

01

input 函數

在 Python 中,你可以使用 input 函數,讓用戶輸入一個數值,並賦值給一個變量。舉例如下:

1

x = input('請輸入 x 的數值:')

2

print('x = ' + x)


請輸入 x 的數值:


    ↓


請輸入 x 的數值:5


x = 5

(有下劃線的 5 是由用戶輸入)

在上述案例中,程序運行第一行代碼後,會在輸出窗口列印 "請輸入 x 的數值:",暫停並等待用戶輸入。用戶輸入後(假設用戶輸入 5),程序將該數值賦值給了 x,並繼續運行第二行代碼,在輸出窗口顯示 "x = 5"

input 函數中的字符串,就是在程序暫停等待用戶輸入時出現的提示文本。

需要注意的是,input 函數總是以字符串(string)的形式賦值給指定的變量。示範如下:

1

x = input('請輸入 x 的數值:')

2

y = x * 2

3

print('x * 2 = ' + y)


請輸入 x 的數值:


    ↓


請輸入 x 的數值:5


x * 2 = 55

x 是字符串(x = '5'),在乘以 2 之後變為 '55'。

如果要使用輸入值進行數學計算,則需要將其轉換為整數(integer)或浮點數(float)。示範如下:

1

x = input('請輸入 x 的數值:')

2

y = float(x) * 2

3

print('x * 2 = ' + str(y))


請輸入 x 的數值:


    ↓


請輸入 x 的數值:5


x * 2 = 10.0

在計算 x * 2 並賦值給 y 前,對 y 使用 float() 將其轉換為浮點數,以便正確計算 x * 2 的數值。

 

由於 y 是浮點數(y = 10.0),第三行的字符串 'x * 2 = ' 和 y 無法相加,需要對 y 使用 str() 將其轉換為字符串,否則會出現錯誤提示。

02

if/else 判斷語句

有時候,我們希望在執行某些代碼前可以先進行一些邏輯判斷。當滿足某些情況的時候,執行一段代碼;反之,執行另一段代碼。這時就需要用到 if/else 判斷語句

 

完整的 if/else 判斷語句格式如下:

1

if 判斷條件1 :

2

    執行命令1

3

elif 判斷條件2 :

4

    執行命令2

5

elif 判斷條件3 :

6

    執行命令3

7

else:

8

    執行命令4

if 是一段判斷語句的開頭,是必要的語句。在一段判斷語句中,if 僅出現一次。在沒有 if 的情況下,不可以使用 elif 和 else。有多個分支時,從第二個起用 elif,可出現多次。

從上到下,當 if 或某一個 elif 的判斷條件成立時,執行其命令,並跳過餘下的判斷語句及其分支。

當 if 和所有 elif 的判斷條件都不成立時,執行 else 下的命令。

在一段判斷語句中,else 同樣只能出現一次

注意,上述代碼中,第二、四、六、八行,沒有進行左對齊。這在程式語言中叫做 "縮進"。縮進的長度通常是按一次 Tab 鍵或四次空格鍵。舉例如下:

1

if x == 0:

2

    print('x 等於 0')   # 有縮進

3

print(x)   # 無縮進

在上面這個案例中,第二行進行了一次縮進,表示它是第一行 if 語句下的分支。只有 x 等於 0(即 x == 0 為 True)時,第二行才會被執行。

而第三行沒有縮進,它不是第一行 if 語句下的分支,無論 x 是否等於 0,第三行都會被執行。

Python 代碼中也可能出現多次縮進。舉例如下:

1

if x > 0:

2

    if x < 5:   # 一次縮進

3

        print('x 大於 0 且小於 5')   # 二次縮進

4

    else:   # 一次縮進

5

        print('x 大於 5')   # 二次縮進

6

else:

7

    print('x 小於等於 0')   # 一次縮進

在這個案例中,第一行的 if 語句先判斷 x 是否大於 0。如果成立,則在第二行進一步判斷x是否小於 5。

 

在有縮進的情況下,我們可以看出,第四行的 else 是對應第二行的 if,不是第一行的 if;而第六行的 else,才是對應第一行的 if。

 

在 Python 中,縮進不僅是必要的編程格式,同時也極大地提高了代碼的可讀性

 

現在讓我們編寫一個程序:

運行時,要求用戶輸入一個數字

若該數字大於 0,列印 '輸入的數字是正數'

若該數字小於 0,列印 '輸入的數字是負數'

否則,列印 '輸入的數字是 0'

示範如下:

1

x = input('請輸入任意數字:')

2

x = float(x)   #判定前,將 x 轉為浮點數

3

if x > 0:

4

    print('輸入的數字是正數')

5

elif x < 0:

6

    print('輸入的數字是負數')

7

else:

8

    print('輸入的數字是 0')


請輸入任意數字:


    ↓


請輸入任意數字:5


輸入的數字是正數


請輸入任意數字:


    ↓


請輸入任意數字:-5


輸入的數字是負數


請輸入任意數字:


    ↓


請輸入任意數字:0


輸入的數字是 0

在第二行將 x 轉換為數字時,要使用 float(),而不是 int(),否則可能出現以下情況:

1

x = input('請輸入任意數字:')

2

x = int(x)

3

if x > 0:

4

    print('輸入的數字是正數')

5

elif x < 0:

6

    print('輸入的數字是負數')

7

else:

8

    print('輸入的數字是 0')


請輸入任意數字:


    ↓


請輸入任意數字:0.5


輸入的數字是 0

將數字轉換為整數時,會直接刪除小數,只保留整數部分。因此,0.5 會變成 0,進而執行第八行命令。

 

現在我們來看下一個案例。

1

x = 10

2

if x > 0:

4

    print('x 大於 0')

5

elif x > 5:

6

    print('x 大於 5')


x 大於 0

雖然 x > 0 和 x > 5 都成立,但由於 x > 0 先被判定成立,會進入其分支,並跳過剩餘的判斷語句,不會對 x >5 進行判斷,因此 'x 大於 5' 不會被列印。

 

利用這個特性,有時候我們可以將代碼寫得稍微簡潔一些。請看下面這個案例。

 

假設我們有一個整數變量 x(數值範圍是 0 到 100),代表某一名學生的成績。科目評級規則如下:

85到100分:優

70到84分:良

60到69分:及格

0到59分:不及格

我們需要寫一段代碼,根據 x 的數值,輸出該學生的科目評級。

示範如下:

1

x = 90

2

if 85 <= x:

3

    print('優')

4

elif 70 <= x:

5

    print('良')

6

elif 60 <= x:

7

    print('及格')

8

else:

9

    print('不及格')


我們本應將第三行的判斷條件寫為 70 <= x < 85,才符合科目評級規則的描述。為什麼不需要呢?原因是,當程序開始對第三行的判斷條件進行檢查時,就意味著第一行的判斷結果是 False,也就排除了 85 <= x 的情況。

 

讓我們稍微修改一下上面的代碼。

1

x = 90

2

if 85 <= x:

3

    print('優')

4

if 70 <= x:

5

    print('良')

6

if 60 <= x:

7

    print('及格')

8

else:

9

    print('不及格')




及格

有時候編程者會不小心把 elif 寫成 if。當我們把第五行和第七行的 elif 改為 if 後,輸出窗口中便會多出 "良" 和 "及格" 的結果。而在我們的預期裡,我們應該只會看到一個評級被列印出來。

我們在前文提到過,if 是一段判斷語句的開頭。那麼在這串代碼中,第五行和第七行的 if 分別開啟了新的一段判斷語句,不受先前的判斷語句影響,會獨立執行。


插曲

秀一波操作

還是上面這個案例:

假設我們有一個整數變量 x(數值範圍是 0 到 100),代表某一名學生的成績。科目評級規則如下:

85到100分:優

70到84分:良

60到69分:及格

0到59分:不及格

剛剛我們用了 9 行代碼完成這個操作。不過,我們可以將其簡化為 4 行,而且不超綱,用的都是目前講過的知識點。

思路如下:

創建一個列表,rank_list = ['不及格', '及格', '良', '優']

我們可以用索引值從該列表中讀取評級(索引值 0 對應 '不及格',1 對應 '及格',以此類推)

接下來就是想辦法,讓 x 的值實現如下轉換

0 - 59   =>   0

60 - 69   =>   1

70 - 84   =>   2

85 - 100   =>   3

這樣一來,我們就可以將轉換後的數字當做索引值使用

示範如下:

1

x = 90

2

rank_index = int(x > 59) + int(x > 69) + int(x > 84)

3

rank_list = ['不及格', '及格', '良', '優']

4

print(rank_list[rank_index])


重點是第二行的 int(x > 59) + int(x > 69) + int(x > 84)

先不看 int(),根據 x 值的不同,各個部分的判定結果如下:

x

x > 59

x > 69

x > 84

0 - 59

False

False

False

60 - 69

True

False

False

70 - 84

True

True

False

85 - 100

True

True

True

我們在第一章說過,將布爾值轉為整數時,True 變為 1,False 變為 0。

那麼,套上 int() 以後,各個部分的數值如下:

x

int(x > 59)

int(x > 69)

int(x > 84)

0 - 59

0

0

0

60 - 69

1

0

0

70 - 84

1

1

0

85 - 100

1

1

1

把它們全加起來:

x

int(x > 59) + int(x > 69) + int(x > 84)

0 - 59

0

60 - 69

1

70 - 84

2

85 - 100

3

這樣一來,我們便實現了數值轉換,把 x 變成了索引值。

那最後一步就是直接對列表使用索引值,就能列印出對應的評級。

如果你非要繼續簡化,只用兩行代碼也是可以。

1

x = 90

2

print(['不及格', '及格', '良', '優'][int(x>59) + int(x>69) + int(x>84)])


不過這樣代碼的易讀性就有所下降。

想像一下,假如你有 100 個分支,你就需要寫 1 個 if 和 99 個 elif。在這個情況下,進行上面這樣的數據轉換,會比直接寫 if/else 判定語句更有效率。

看,是不是沒有任何超綱的東西?

將布爾值轉為整數,使用索引值讀取列表,這些都在第一章就講過。只是計算上複雜一些,但運用的命令都是最基礎的。

03

賦值時的判斷語句

直接看下面這個案例:

1

if x > 5:

2

    y = 1

3

else:

4

    y = 0

上面這串代碼的邏輯很好理解,就是根據 x 的值(假設 x 已被賦值),對 y 進行賦值。若 x 大於 5,則將 y 設為 1;否則,將 y 設為 0。

 

我們可以將這四行代碼簡化為一行:

只需一行代碼即可在不同情況下對 y 賦值。

04

謹慎使用 else

else 語句很方便,它就是排除掉所有 if 和 elif 後的情況。

不過,我個人的編程習慣是,儘量不寫 else

舉例來說,假設我們要編寫一個程序如下:

現有一個變量 x

若 x 大於 0,列印 'x 大於 0'

若 x 小於等於 0,列印 'x 小於等於 0'

我們可以這樣寫:

1

if x > 0:

2

    print('x 大於 0')

3

else:

4

    print('x 小於等於 0')

我們知道,這裡的 else,就是 x 小於等於 0 的情況。

仔細想想,真的是這樣嗎?

題目裡並沒有說明,x 是一個整數或浮點數。那就有可能出現下面這種情況。

1

x = 'ABCD'

2

if x > 0:

3

    print('x 大於0')

4

else:

5

    print('x 小於等於0')


x 小於等於0

如果 x 是字符串,那麼 x > 0 的判定結果也是 False,會進入 else 下的分支,列印 'x 小於等於 0'

當我們編寫的程序較為複雜時,有時候會不小心使用重複的變量名。可能在你腦海中,你認為 x 應該是個整數,但在程序中某個角落,你不小心將 x 變成了字符串。接下來,你就得花半天時間去研究,為什麼寫的 if/else 判斷語句永遠只進入 else。更糟的可能是,你的程序一直進入 else,而你卻還以為它運作正常。

實戰中,我個人會習慣這樣寫:

1

x = 'ABCD'

2

if x > 0:

3

    text = 'x 大於0'

4

elif x <= 0:

5

    text = 'x 小於等於0'

6

print(text)


NameError:  name 'text' is not defined

若 x 不是整數或浮點數,那麼 x 就既不大於 0,也不小於等於 0,text 也就不會被賦值。在列印的時候,會出現異常提示。

總結

本章知識點

下一章,我們會講解 for 循環語句。

相關焦點

  • Python基礎教程判斷(if)語句
    判斷語句 又被稱為 「分支語句」,正是因為有了判斷,才讓程序有了很多的分支02. if 語句體驗2.1 if 判斷語句基本語法在Python>中,if 語句 就是用來進行判斷的,格式如下:python if 要判斷的條件: 條件成立時,要做的事情 ……注意:代碼的縮進為一個tab鍵,或者
  • 《第4章 Python 流程控制語語句》4.2.2 if……else語句!
    《高中信息技術 Python編程》 教學案《第4章 Python 流程控制語語句》4.2.2 if...else語句!(2)if....else...形式語句格式示例:if 要判斷的條件:滿足條件時執行的語句else:不滿足條件時執行的語句注意:else必須配合if使用,而其 else 後不跟條件,else總與離它最近的if進行匹配。if和else語句以及各自的縮進部分是一個完整的代碼塊。
  • 《第4章 Python 流程控制語語句》4.2.3 if……elif……else語句!
    《高中信息技術 Python編程》 教學案《第4章 Python 流程控制語語句》4.2.3 if...elif...else語句!瀏覽器版本過低,暫不支持視頻播放(3)if....elif....else....形式語法格式如下:if 條件1:條件1滿足執行的代碼elif
  • 魅力python——if-elif-else語句
    小夥伴們大家好,今天我們一起來學習python的條件判斷——if語句。計算機能自動完成許多工作,整個過程不需要人為的參與,幹涉計算機的工作。自動化的發展,解放了人類的雙手,提高了生產力,提高了人類的生活質量。
  • 第十五章:Java編程之if-else條件判斷
    在Java編程中,常見的條件判斷有if-else語句和switch語句,本章先介紹if-else語句。第8行,採用if條件判斷,裡面條件寫的是「x<60」,表示的x如果小於60,就會執行第9行代碼,否則就不執行。大家要是有興趣,可以自己寫一寫,看看效果。同時修改一下整型變量x的值,如果賦值為60,看看會怎麼樣。if加else語句在上面最簡單的if語句的基礎上,增加了不滿足條件的場景。條
  • 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、else、switch都有了
    if(表達式1): 語句1elif(表達式2): 語句2…elif(表達式n): 語句nelse: 語句mif…elif…else語句的執行過程:首先判斷表達式1的值是否為真。如果為真,則執行語句1。否則,程序流轉到elif子句,判斷表達式2的值是否為真。如果表達式2的值為真,則執行語句2。否則,程序進入下面一個elif子句,以此類推。
  • 【python學習】python判斷語句
    中國史之【帝嚳在位】:      帝嚳(ku),高辛氏,姬姓,據說是黃帝的曾孫,中華上古時期部落聯盟首領,五帝之一,是《山海經》裡天帝帝俊的原型
  • python分支結構if-else解決你的選擇困難症,學習python第3天
    而在python程序中,也存在選擇。python分支結構if-else就是python程序中的選擇,作用py程式設計師的我們應用如何來使用python分支結構呢?下面羽憶教程為你介紹。python分支結構語句if的使用 1、單分支結構 在python分支結構中,單分支結構是比較簡單的,其只使用到if關鍵詞,其實例如下: a = 10if a % 2 == 0:
  • Python if else條件語句詳解
    前面我們看到的代碼都是順序執行的,也就是先執行第1條語句,然後是第2條、第3條……一直到最後一條語句,這稱為順序結構。
  • 如何學python-第六課 流程控制-IF,ELSE,條件語句
    今天,我們會把上節課學到的東西與 if、else結合起來使用。條件判斷語句條件判斷語句會根據語句內容返回True或者False.我們上篇文章裡使用的某些語句就是條件判斷語句。如果接下來的內容讓你感到困惑,我建議你去複習一下上一篇文章。老規矩,我們還是先看看代碼:這裡這些語句就叫做『條件判斷語句』。
  • 09.為什麼Python循環語句裡也有else?
    判斷數字n是否是素數在第7課學過。2. if flag 和 for j 語句縮進保持一致,才能保證兩個語句的地位相等。if 語句始終被執行。:breakelse:count += 1print(i)print(count)循環語句裡的else是Python語言特有的,有趣的語法。
  • 《第4章 Python 流程控制語語句》4.2.4 if語句的嵌套!
    《高中信息技術 Python編程》 教學案《第4章 Python 流程控制語語句》4.2.4 if語句的嵌套!if判斷語句的嵌套:生活中的例子:(火車站的二次安檢 首先得先有片進入火車站候車大廳)elif 的應用場景是:同時判斷多個條件,多有的條件都是平級的在開發中,使用 if 進行條件判斷,如果希望在條件成立的執行語句中再增加條件判斷,就可以使用if的嵌套。
  • python條件判斷語句
    python輸入語句 大家已經練習完了輸出之後呢,我們來繼續看一下輸入語句的用法 input 後面加上提示輸入的語句,就可以獲取用戶輸入的語句 舉個小例子: 我們輸入123456後按回車,即可成功輸入
  • python:if語句和字典
    微信公眾號:學點啥玩點啥小白友好型python:if語句和字典#第5章 if語句
  • Python基礎教程全套6.4:break和continue語句
    break語句:for letter in 'Runoob':       if letter == 'b':      break
  • python學習筆記:條件語句IF
    : 執行語句……else: 執行語句……else 為可選語句,當需要在條件不成立時執行內容則可以執行相關語句': # 判斷變量是否為 python print('welcome boss') # 並輸出歡迎信息else: print(name) # 條件不成立時輸出變量名稱
  • Python入門基礎解答條件判斷語句和循環語句的新手使用教程
    無論什麼語言都不會缺少條件判斷語句和循環語句。我們日常中也有條件判斷和循環,條件判斷(明天如果下雨就不出門,如果晴天就出門。);循環(上學朗讀課文,老師說:把文章的第幾段落讀三遍,重複一遍又一遍。)if 語句Python中if語句的形式如下所示:if語句執行有個特點,它是從上往下判斷,如果在某個判斷上是True,把該判斷對應的語句執行後,就忽略掉剩下的elif和else。
  • Python 語句與結構
    1、賦值語句python 的賦值都是指對象的引用。保存的是對象的內存地址。例如PyValue=「今天天氣不錯」 PyValue=「心情也不錯」第一句執行時Python 先在內存中創建字符串對象並賦值」 今天天氣不錯」, PyValue 設置為字符串對象的引用。
  • Python學習筆記:條件語句if、elif與else
    if語句中包含三種條件判斷句式,即if、elif和else。其中,if與elif部分都包含判斷條件,當判斷條件都不成立時,程序才能執行else部分的代碼。if語句最基礎的形式是if-else,其基本語法格式如下。if-else語句常用的參數及說明如表 1所示。