Python3中的條件判斷、控制語(yǔ)句、邏輯語(yǔ)句詳解

在代碼開發(fā)的過(guò)程中,條件判斷、控制語(yǔ)句是必不可少的內(nèi)容。它支撐起了整個(gè)開發(fā)項(xiàng)目的許多細(xì)節(jié)。比如單單在登錄模塊中,我們就需要:
1、判斷賬號(hào)密碼的輸入是否符合規(guī)范;
2、判斷賬號(hào)密碼的值是否正確;
3、根據(jù)不同的賬號(hào)密碼輸入狀況去給與相應(yīng)的提示或者繼續(xù)不同的邏輯操作(如登錄、報(bào)錯(cuò)等);
4、登錄后我們需要跳轉(zhuǎn)的頁(yè)面、需要展示的內(nèi)容等等

那么,Python中的條件判斷是怎么樣的呢?

bool布爾變量

在說(shuō)條件判斷之前,我們需要先弄清Python中用什么來(lái)表示真、假、對(duì)、錯(cuò)、存在、不存在等等。

在Python中,我們使用bool來(lái)表示我們所需要的的結(jié)果是真還是假。這兒的真假,分別對(duì)應(yīng)了bool中的兩個(gè)值,True和False。True為真,F(xiàn)alse為假。(注意:在有的語(yǔ)言中,用YES表示真,NO表示假。Python中不能這么使用

所以當(dāng)我們判斷條件的返回值時(shí),返回True的時(shí)候,表示當(dāng)前條件判斷成立;返回False的時(shí)候,表示當(dāng)前條件判斷不成立。

在bool中,還有一些情況來(lái)表示True或者False:

  • Number不等于0,等于0的時(shí)候?yàn)镕alse,其余不管大于還是小于,一律是True
  • String為空("")的情況下為False,但是String為空格的情況下" ",是True
  • Set、List、Dictionary為空的時(shí)候?yàn)镕alse,不為空的時(shí)候?yàn)門rue。

邏輯運(yùn)算符

在條件判斷中,時(shí)常離不開邏輯運(yùn)算符。判斷大小、判斷相等、判斷成立條件、判斷是不是某個(gè)容器的一部分等等。

# 比較運(yùn)算符
a == b        # a等于b(注意不能只用一個(gè)=,只用一個(gè)=是賦值運(yùn)算符)
a < b         # a小于b
a > b         # a大于b
a >= b        # a大于等于b
b <= b        # b小于等于a
a != b        # a不等于b

# 同一性運(yùn)算符
a is b        # a和b是同一個(gè)對(duì)象
a is not b    # a和b不是同一個(gè)對(duì)象

# 成員運(yùn)算符
a in b        # a是容器b里的成員
a not in b    # a不是容器b里的成員

# 布爾運(yùn)算符(順序運(yùn)算符)
condition_a and condition_b
condition_a or condiction_b
注意,== 和 is 的區(qū)別:
  • 實(shí)質(zhì)上來(lái)說(shuō),== 是比較運(yùn)算符,is 是同一性運(yùn)算符
  • == 用來(lái)比較符號(hào)兩邊的對(duì)象的value是否相等
  • is 用來(lái)比較兩邊對(duì)象的唯一身份標(biāo)識(shí)(內(nèi)存地址)是否一致,可用id()方法打印查看
注意,and 和 or 的區(qū)別
  • 表達(dá)式從左至右運(yùn)算,若 or 左側(cè)邏輯值 為 True, 則不繼續(xù)校驗(yàn) or 右側(cè)的表達(dá)式。直接返回True
  • 表達(dá)式從左至右運(yùn)算,若 and 左側(cè)邏輯值為True, 則繼續(xù)校驗(yàn) and 右側(cè)的表達(dá)式,反之則不繼續(xù)校驗(yàn)
  • 如果判斷中的所有 and 都為真,則返回最后一個(gè)真值,如果存在假值,則返回第一個(gè)假值(不是返回False)
  • 如果判斷中的 or 左側(cè)為真,則直接返回真值,如果都為假,則返回最后一個(gè)假值(不是返回False)
  • and 的優(yōu)先級(jí)高于 or
斷言

斷言(Assert)的作用是,當(dāng)關(guān)鍵詞后邊的條件判定為假的時(shí)候,程序自動(dòng)崩潰且拋出AssertionError異常。

由上看來(lái),斷言為拋出異常導(dǎo)致程序崩潰,這對(duì)于程序的正常運(yùn)行是極為不友好的,那么我們?yōu)槭裁葱枰獢嘌阅兀?/p>

這是因?yàn)椋?dāng)我們才測(cè)試程序的時(shí)候,經(jīng)常為需要臨界值的判斷或者欲調(diào)用值的判斷。這個(gè)時(shí)候,如果傳入的值超過(guò)臨界值或者傳入的類型不對(duì)的時(shí)候,程序也有可能會(huì)崩潰且崩潰原因不易排查。這個(gè)時(shí)候,我們就可以用斷言輔以附加信息進(jìn)行先行排查,讓我們的程序在出發(fā)隱患點(diǎn)的時(shí)候先行拋出異常。

斷言一般用在確保程序中某一個(gè)條件一定為真或者符合規(guī)范才能讓程序正常工作的情況下。

也有可以校驗(yàn)錯(cuò)誤且不拋出異常的判斷語(yǔ)句,這邊則需要用到try/except

try/except:
try:
    a = 10 
    b = 0
    c = a/b
except Exception as error:
    print(error)

上述語(yǔ)句是一個(gè)會(huì)導(dǎo)致程序崩潰的語(yǔ)句,因?yàn)樵跀?shù)學(xué)中的除法里,0不能當(dāng)除數(shù),所以運(yùn)行上述代碼的情況下,會(huì)因0而崩潰。

為了不使這邊的崩潰打斷程序的運(yùn)行,我們便使用try/except語(yǔ)句。使用該語(yǔ)句的情況下,即使出現(xiàn)會(huì)導(dǎo)致程序崩潰的情況也不會(huì)直接崩潰,而是會(huì)執(zhí)行我們except后的操作。

except 后的 Exception 值是可以替換的,Exception是一個(gè)包含了所有錯(cuò)誤異常的集合。當(dāng)我們不知道可能會(huì)發(fā)生什么錯(cuò)誤的情況下,我們便可以使用 Exception。

下面列舉了 Exception 中常用的一些錯(cuò)誤信息:

異常 描述
NameError 嘗試訪問(wèn)一個(gè)沒(méi)有申明的變量
ZeroDivisionError 除數(shù)為0
SyntaxError 語(yǔ)法錯(cuò)誤
IndexError 索引超出序列范圍
KeyError 請(qǐng)求一個(gè)不存在的字典關(guān)鍵字
IOError 輸入輸出錯(cuò)誤(比如你要讀的文件不存在)
AttributeError 嘗試訪問(wèn)未知的對(duì)象屬性
ValueError 傳給函數(shù)的參數(shù)類型不正確,比如給int()函數(shù)傳入字符

控制語(yǔ)句

Python中的控制語(yǔ)句又叫流程控制語(yǔ)句,主要為if、elif、else語(yǔ)句、while...else語(yǔ)句和for語(yǔ)句

if、elif、else語(yǔ)句

Python中的if、elif、else語(yǔ)句很經(jīng)常搭配一起使用。主要用在條件判斷、多種條件判斷的場(chǎng)景下, 如:

login_person = input('請(qǐng)輸入您登陸的身份')
if login_person == 'teacher': 
   pass
elif login_person == 'student':
   pass
else login_person == 'admin':
   pass

因?yàn)镻ython中沒(méi)有switch的用法,所以當(dāng)我們用到多種條件判斷的時(shí)候,就需要用到if...elif...else的組合。這兒的elif就相當(dāng)于我們其他于語(yǔ)言里的else if,可能是Python的創(chuàng)造者為了偷懶,就寫成了elif的樣子。

注意:if、elif、else后的“:”一定要記得寫,且是寫英文的“:”。

當(dāng)我們需要多次執(zhí)行一行代碼或者一個(gè)代碼塊的代碼時(shí),可以使用循環(huán)語(yǔ)句。Python中提供的循環(huán)語(yǔ)句有while語(yǔ)句和for語(yǔ)句,另外再輔以break、continue、pass來(lái)完成整個(gè)循環(huán)。(注意:Python中沒(méi)有do...while語(yǔ)句)

while...else
count = 0
while count < 100:
    print(count)
    count += 1
else:
    print('count end')

當(dāng)給定的判斷條件的值為真的時(shí)候,便會(huì)一直執(zhí)行while循環(huán)體中的代碼。直到判斷條件值為假的時(shí)候才會(huì)跳出循環(huán),然后執(zhí)行else中的語(yǔ)句(如果else語(yǔ)句存在)。

注意:
  • else語(yǔ)句不一定非得添加,根據(jù)實(shí)際需求使用
  • while語(yǔ)句千萬(wàn)不要用一直為真的判斷語(yǔ)句,如直接用True,除非搭配break使用
  • 當(dāng)while循環(huán)被break中斷的時(shí)候,else中的語(yǔ)句不會(huì)執(zhí)行
for
names = ['Jim', 'Tim', 'Tom', 'John']
for name in names :
    print(name)

for循環(huán)通常用于遍歷有序數(shù)據(jù)類型(如list、tuple、range、str)、集合和字典。for的用法如上所示,可以直接放入一個(gè)要遍歷的對(duì)象。同時(shí)for循環(huán)也可放入range用index迭代,如下:

names = ['Jim', 'Tim', 'Tom', 'John']
for index in range(len(names)) :
    print(names[index])

for也可以與else搭配使用,具體用法與while...else一致。

break、continue、pass、exit()
  • break:執(zhí)行break語(yǔ)句的時(shí)候,會(huì)直接終止整個(gè)循環(huán)且跳出整個(gè)循環(huán)體
  • continue:執(zhí)行continue語(yǔ)句的時(shí)候,不會(huì)終止整個(gè)循環(huán),只會(huì)跳出當(dāng)前這一步的循環(huán)不執(zhí)行,進(jìn)而執(zhí)行下一步的循環(huán)
  • pass:不會(huì)做任何操作,只起到占位的作用,讓系統(tǒng)不崩潰
  • exit():會(huì)結(jié)束整個(gè)程序(慎用)
?著作權(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

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