如果(If) | Python 中的條件控制語(yǔ)句詳解

前言

文章首發(fā)于個(gè)人公眾號(hào):可樂(lè)python說(shuō)

Hi,大家好,我是可樂(lè),生活中曾聽(tīng)到過(guò)太多的如果,如果當(dāng)年我再認(rèn)真一點(diǎn),如果我高考的物理多選題沒(méi)有多選選項(xiàng),如果我大學(xué)時(shí)多學(xué)些技能,如果我早點(diǎn)買房等等。

工作中,同樣存在很多 如果 ,今天給大家詳細(xì)介紹 Python 中的條件控制語(yǔ)句,并附上相應(yīng)的案例代碼,便于吸收、理解。

條件控制語(yǔ)句簡(jiǎn)介

Python 中的 條件控制語(yǔ)句 (Conditional control statement) 是通過(guò)一條或者多條語(yǔ)句的執(zhí)行結(jié)果(True 或者 False),來(lái)決定執(zhí)行的代碼邏輯 。

它包含 if 、elifelse 關(guān)鍵字, Python 中沒(méi)有 else if 的寫法,只存在 elif 這種寫法。

每句判斷語(yǔ)句使用冒號(hào) - : 結(jié)尾,使用 縮進(jìn) 劃分語(yǔ)句塊,相同縮進(jìn)數(shù)的語(yǔ)句組成一個(gè)語(yǔ)句塊。

條件控制語(yǔ)句,包括 if 語(yǔ)句、if - else 語(yǔ)句、if - elif - else 語(yǔ)句、以及 if - elif (多個(gè)elif) - else 語(yǔ)句,下面我們通過(guò)案例逐一演示。

if 語(yǔ)句

if 語(yǔ)句,僅有一個(gè)判斷條件,如果條件成立(為 True),則執(zhí)行判斷語(yǔ)句后帶縮進(jìn)的代碼邏輯,否則不執(zhí)行。

1、語(yǔ)法格式:

# 語(yǔ)句末尾的冒號(hào)一定不能丟
if 判斷條件:
    # 注意與 if 縮進(jìn)
    條件為真才執(zhí)行的代碼邏輯

2、執(zhí)行流程圖:

3、案例:

>>> if True:
        print("條件為真時(shí)打印的語(yǔ)句")
        
條件為真時(shí)打印的語(yǔ)句

if - else 語(yǔ)句

if - else 語(yǔ)句,僅有一個(gè)判斷條件,與 if 語(yǔ)句的區(qū)別在于,如果條件成立(為 True),則執(zhí)行 if 判斷語(yǔ)句后帶縮進(jìn)的代碼邏輯,否則執(zhí)行 else 后帶縮進(jìn)的代碼邏輯。

1、語(yǔ)法格式:

# 語(yǔ)句末尾的冒號(hào)一定不能丟
if 判斷條件:
    # 注意與 if 縮進(jìn)
    條件為真時(shí)執(zhí)行的代碼邏輯
else:
    # 注意與 else 縮進(jìn)
    條件為假時(shí)執(zhí)行的代碼邏輯

2、執(zhí)行流程圖:

3、案例:

>>> if True:
        print("條件為真時(shí)打印的語(yǔ)句")
    else:
        print("條件為假時(shí)打印的語(yǔ)句")
        
條件為真時(shí)打印的語(yǔ)句

>>> if False:
        print("條件為真時(shí)打印的語(yǔ)句")
    else:
        print("條件為假時(shí)打印的語(yǔ)句")
        
條件為假時(shí)打印的語(yǔ)句

if - elif - else 語(yǔ)句

在使用判斷語(yǔ)句時(shí),我們有時(shí)需要對(duì)兩個(gè)條件進(jìn)行判斷,并執(zhí)行對(duì)應(yīng)的代碼邏輯,這時(shí)以上兩種語(yǔ)句就無(wú)法滿足我們的需求。

我們可使用 if - elif - else 語(yǔ)句,有兩個(gè)判斷條件,如果 if 后的條件成立(為 True),則執(zhí)行 if 判斷語(yǔ)句后帶縮進(jìn)的代碼邏輯。

如果 elif 后的條件成功(為 True),則執(zhí)行 elif 判斷語(yǔ)句后帶縮進(jìn)的代碼邏輯,否則執(zhí)行 else 后帶縮進(jìn)的代碼邏輯。

值得注意的是,if - elif - else 語(yǔ)句中,僅有一個(gè)條件成立后,就會(huì)退出當(dāng)前整個(gè)判斷語(yǔ)句,簡(jiǎn)單來(lái)說(shuō),這三條判斷路徑,只會(huì)走其中一條。

1、語(yǔ)法格式:

# 語(yǔ)句末尾的冒號(hào)一定不能丟
if 判斷條件一:
    # 注意與 if 縮進(jìn)
    條件一為真時(shí)執(zhí)行的代碼邏輯
elif 判斷條件二:
    # 注意與 if 縮進(jìn)
    條件二為真時(shí)執(zhí)行的代碼邏輯
else:
    # 注意與 else 縮進(jìn)
    條件一、條件二都為假時(shí)執(zhí)行的代碼邏輯

2、執(zhí)行流程圖:

3、案例:

>>> drink = "kele"
>>> if drink == "kele":
        print("你選擇的飲品是可樂(lè)")
    elif drink == "xuebi":
        print("你選擇的飲品是雪碧")
    else:
        print("你選擇的既不是可樂(lè),也不是雪碧")
        
你選擇的飲品是可樂(lè)       

if - elif (多個(gè)) - else 語(yǔ)句

與 if - elif - else 語(yǔ)句的區(qū)別在于,elif 條件判斷的數(shù)量不止一個(gè)。

1、語(yǔ)法格式:

# 語(yǔ)句末尾的冒號(hào)一定不能丟
if 判斷條件一:
    # 注意與 if 縮進(jìn)
    條件一為真時(shí)執(zhí)行的代碼邏輯
elif 判斷條件二:
    # 注意與 if 縮進(jìn)
    條件二為真時(shí)執(zhí)行的代碼邏輯
...
elif 判斷條件N:
    # 注意與 if 縮進(jìn)
    條件N為真時(shí)執(zhí)行的代碼邏輯
else:
    # 注意與 else 縮進(jìn)
    條件一、條件二、...條件N都為假時(shí)執(zhí)行的代碼邏輯

2、執(zhí)行流程圖:

3、案例:

>>> drink = "Moutai"
>>> if drink == "kele":
        print("你選擇的飲品是可樂(lè)")
    elif drink == "xuebi":
        print("你選擇的飲品是雪碧")
    elif drink == "tea":
        print("你選擇的飲品是茶")
    else:
        print("你選擇的不是可樂(lè),不是雪碧,也不是茶")
        
你選擇的不是可樂(lè),不是雪碧,也不是茶

嵌套使用

以上四種條件控制語(yǔ)句,均支持自身嵌套、以及彼此嵌套使用,下面以 if 語(yǔ)句 與 if- else 語(yǔ)句為例:

if 語(yǔ)句自身嵌套使用
>>> drink = "kele"
>>> ice = "True"
# 第一層判斷是否是可樂(lè)
>>> if drink == "kele":
        # 第二層判斷是否加冰
        if ice == "True":
            print("你選擇的飲品是可樂(lè)加冰")
                    
你選擇的飲品是可樂(lè)加冰
if - else 語(yǔ)句自身嵌套使用
>>> drink = "kele"
>>> ice = "True"
>>> if drink == "kele":
        if ice == "True":
            print("你選擇的飲品是可樂(lè)加冰")
        else:
            print("你選擇的飲品是可樂(lè)不加冰")
    else:
        print("你選擇的飲品不是可樂(lè)")
                    
你選擇的飲品是可樂(lè)加冰
if 語(yǔ)句與 if - else 語(yǔ)句彼此嵌套使用
>>> drink = "kele"
>>> ice = "False"
>>> if drink == "kele":
        if ice == "True":
            print("你選擇的飲品是可樂(lè)加冰")
        else:
            print("你選擇的飲品是可樂(lè)不加冰")
                    
你選擇的飲品是可樂(lè)不加冰

條件控制語(yǔ)句中常用的基礎(chǔ)運(yùn)算符

常用的基礎(chǔ)運(yùn)算符可參照下表:

操作符 說(shuō)明
< 小于
<= 小于或者等于
> 大于
>= 大于或者等于
== 等于,比較兩側(cè)對(duì)象的值是否相等
!= 不等于
in / not in 成員運(yùn)算符
is / not is 身份運(yùn)算符

1、小于 - < 與 小于或者等于 - <=

>>> score = 59
>>> if 0 < score < 60:
        print("未及格,繼續(xù)努力")
    elif 60 <= age < 69:
        print("及格,繼續(xù)進(jìn)階")
    else:
        print("中等、良好、或優(yōu)秀")
                    
未及格,繼續(xù)努力

2、大于 - > 與 大于或者等于 - >=

>>> score = 91
>>> if score >= 60:
        print("及格,繼續(xù)進(jìn)階")
    elif score > 90:
        print("優(yōu)秀")
    else:
        print("其他等級(jí)")
                    
優(yōu)秀

3、等于 - == 與 不等于 - !=

>>> password = "123456"
>>> if password == "123456":
        print("登陸成功")
                    
登陸成功

>>> user_name = "zhangsan"
>>> if user_name != "root":
        print("沒(méi)有操作權(quán)限")
                    
沒(méi)有操作權(quán)限

4、成員運(yùn)算符 in 、not in 判斷成員是否在序列中

>>> user_list = ["kele","zhangsan"]
>>> login_name = "lisi"
>>> if login_name not in user_list:
        print("用戶不存在")
    elif login_name in user_list:
        print("登陸成功")
                    
用戶不存在

5、身份運(yùn)算符 is 、not is 比較兩個(gè)對(duì)象的存儲(chǔ)單元

>>> kele_age = 18
>>> xuebi_age = 18
>>> if kele_age is xuebi_age:
        print("兩者指向同一塊內(nèi)存空間")
    if kele_age not is xuebi_age:
         print("兩者指向不同的內(nèi)存空間")
    
兩者指向同一塊內(nèi)存空間

條件控制語(yǔ)句中常用的邏輯運(yùn)算符

常用的邏輯運(yùn)算符可參照下表:

運(yùn)算符 說(shuō)明
not 邏輯非
and 邏輯與
or 邏輯或

1、邏輯非 - not,對(duì)語(yǔ)句的布爾值取反

>>> bool_1 = True
>>> bool_2 = False
>>> if not bool_1:
        print("對(duì)真取非為假")
    if not bool_2:
        print("對(duì)假取非為真")
    
對(duì)假取非為真

2、邏輯與 - and,找 False,若第一個(gè)語(yǔ)句的值為 False 則直接返回 False,否則,返回第二個(gè)語(yǔ)句的值

# 有假則為假
>>> bool_1 = True
>>> bool_2 = False
>>> bool_3 = True
>>> if bool_1 and bool_2:
        print("有假則為假")
    if bool_1 and bool_3:
        print("全真才為真")
        
全真才為真

3、邏輯或 - or,找 True,若第一個(gè)語(yǔ)句的值為 True 則直接返回 True,否則,返回第二個(gè)語(yǔ)句的值

# 有真則為真
>>> bool_1 = True
>>> bool_2 = False
>>> bool_3 = False
>>> if bool_1 or bool_2:
        print("有真則為真")
    if bool_2 or bool_3:
        print("全假才為假")
        
有真則為真

擴(kuò)展 - Python 中的特殊對(duì)象

Python 中有部分特殊對(duì)象,它們的布爾值為 False,具體可參照下表:

對(duì)象 布爾值
None False
所有值為零的數(shù)(整數(shù)、復(fù)數(shù)、浮點(diǎn)數(shù)) False
空字符串 False
空列表 False
空元組 False
空字典 False
空集合 False

下面我們逐一驗(yàn)證

1、None 與值為零的數(shù)

>>> if not None:
        print("None 的布爾值為 False")

None 的布爾值為 False 

>>> if not 0:
        print("0 的布爾值為 False")

0 的布爾值為 False

>>> if not 0.0:
        print("0.0 的布爾值為 False")

0.0 的布爾值為 False

>>> if not 0 + 0j:
        print("0 + 0j 的布爾值為 False")

0 + 0j 的布爾值為 False

2、空字符串、空列表、空元組

>>> if not "":
        print("空字符串的布爾值為 False")

空字符串的布爾值為 False

>>> if not []:
        print("空列表的布爾值為 False")

空列表的布爾值為 False

>>> if not tuple():
        print("空元組的布爾值為 False")

空元組的布爾值為 False

3、空字典、空集合

>>> if not {}:
        print("空字典的布爾值為 False")

空字典的布爾值為 False

>>> if not set():
        print("空集合的布爾值為 False")

空集合的布爾值為 False

擴(kuò)展 - 使用否定判斷精簡(jiǎn)代碼

工作中,多使用否定判斷,可精簡(jiǎn)部分代碼,下面通過(guò)一個(gè)簡(jiǎn)單的案例說(shuō)明

# 傳統(tǒng)寫法
is_kele = True
if is_kele:
    print("Yes")
else:
    print("No")

# 否定判斷
is_kele = True
if not is_kele:
    print("No")
print("Yes")

擴(kuò)展 - 猜拳游戲

import random


def guessing_game():
    """
    猜拳游戲 if - elif - else 與 邏輯運(yùn)算符
    Author:可樂(lè)python說(shuō)
    :return:
    """
    player_input = int(input("請(qǐng)出拳(0剪刀,1石頭,2布):"))
    computer_ = random.randint(0, 2)
    if (player_input == 0 and computer_ == 2) \
            or (player_input == 1 and computer_ == 0) \
            or (player_input == 2 and computer_ == 0):
        print("電腦出拳%s,恭喜你贏了!" % computer_)
    elif (player_input == 0 and computer_ == 0) \
            or (player_input == 1 and computer_ == 1) \
            or (player_input == 2 and computer_ == 2):
        print("電腦出拳%s,平局!" % computer_)
    else:
        print("電腦出拳%s,很遺憾你輸了!" % computer_)


if __name__ == '__main__':
    guessing_game()

擴(kuò)展 - 火車檢票進(jìn)站

def train_check_in():
    """
    火車檢票入站 if - else 嵌套
    Author:可樂(lè)python說(shuō)
    :return: 
    """
    train_ticket = int(input("請(qǐng)出示車票(1表示有,0表示無(wú)):"))
    is_safe = int(input("請(qǐng)過(guò)安檢(1表示安全,0表示危險(xiǎn)):"))
    if train_ticket == 1:
        if is_safe == 1:
            print("通過(guò)安檢,可以上車!")
        else:
            print("你攜帶了違規(guī)物品,沒(méi)通過(guò)安檢,不能上車!")
    else:
        print("沒(méi)有車票,不能進(jìn)站!")


if __name__ == '__main__':
    train_check_in()

總結(jié)

  1. 工作中在處理業(yè)務(wù)邏輯時(shí),經(jīng)常會(huì)使用到條件控制語(yǔ)句,當(dāng)然,以嵌套使用為主。
  2. 使用條件控制語(yǔ)句時(shí),可根據(jù)實(shí)際需求,靈活搭配使用基本運(yùn)算符與邏輯運(yùn)算符。
  3. 書寫時(shí)需注意條件控制語(yǔ)句后的冒號(hào) - : ,以及代碼塊的縮進(jìn)問(wèn)題。
  4. if - else 語(yǔ)句可理解為二選其一,if - elif - else 則為三選其一,包含多個(gè) elif 則為 N 選其一,其中 else 并非必須選項(xiàng)。
  5. 使用邏輯運(yùn)算符時(shí),其優(yōu)先級(jí)需要注意,加上小括號(hào) - () 的語(yǔ)句優(yōu)先級(jí)最高,() > not > and > or 。
  6. 使用條件控制語(yǔ)句時(shí),建議多使用否定判斷,這時(shí)值為空的特殊對(duì)象常被使用,可在一定程度上精簡(jiǎn)代碼。
  7. 文中難免會(huì)出現(xiàn)一些描述不當(dāng)之處(盡管我已反復(fù)檢查多次),歡迎在留言區(qū)指正,也可分享?xiàng)l件控制語(yǔ)句相關(guān)的技巧、有趣的小案例。
  8. 原創(chuàng)文章已全部更新至 Github:https://github.com/kelepython/kelepython
  9. 本文永久博客地址:https://kelepython.readthedocs.io/zh/latest/c01/c01_09.html
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容