前言
文章首發(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 、elif 、else 關(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é)
- 工作中在處理業(yè)務(wù)邏輯時(shí),經(jīng)常會(huì)使用到條件控制語(yǔ)句,當(dāng)然,以嵌套使用為主。
- 使用條件控制語(yǔ)句時(shí),可根據(jù)實(shí)際需求,靈活搭配使用基本運(yùn)算符與邏輯運(yùn)算符。
- 書寫時(shí)需注意條件控制語(yǔ)句后的冒號(hào) -
:,以及代碼塊的縮進(jìn)問(wèn)題。- if - else 語(yǔ)句可理解為二選其一,if - elif - else 則為三選其一,包含多個(gè) elif 則為 N 選其一,其中 else 并非必須選項(xiàng)。
- 使用邏輯運(yùn)算符時(shí),其優(yōu)先級(jí)需要注意,加上小括號(hào) -
()的語(yǔ)句優(yōu)先級(jí)最高,() > not > and > or 。- 使用條件控制語(yǔ)句時(shí),建議多使用否定判斷,這時(shí)值為空的特殊對(duì)象常被使用,可在一定程度上精簡(jiǎn)代碼。
- 文中難免會(huì)出現(xiàn)一些描述不當(dāng)之處(盡管我已反復(fù)檢查多次),歡迎在留言區(qū)指正,也可分享?xiàng)l件控制語(yǔ)句相關(guān)的技巧、有趣的小案例。
- 原創(chuàng)文章已全部更新至 Github:https://github.com/kelepython/kelepython
- 本文永久博客地址:https://kelepython.readthedocs.io/zh/latest/c01/c01_09.html