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

在代碼開發(fā)的過程中狼荞,條件判斷辽装、控制語(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布爾變量

在說條件判斷之前加袋,我們需要先弄清Python中用什么來表示真、假抱既、對(duì)职烧、錯(cuò)、存在蝙砌、不存在等等阳堕。

在Python中,我們使用bool來表示我們所需要的的結(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中,還有一些情況來表示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ì)上來說,== 是比較運(yùn)算符扛或,is 是同一性運(yùn)算符
  • == 用來比較符號(hào)兩邊的對(duì)象的value是否相等
  • is 用來比較兩邊對(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異常赵誓。

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

這是因?yàn)椋?dāng)我們才測(cè)試程序的時(shí)候闹瞧,經(jīng)常為需要臨界值的判斷或者欲調(diào)用值的判斷绑雄。這個(gè)時(shí)候,如果傳入的值超過臨界值或者傳入的類型不對(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 嘗試訪問一個(gè)沒有申明的變量
ZeroDivisionError 除數(shù)為0
SyntaxError 語(yǔ)法錯(cuò)誤
IndexError 索引超出序列范圍
KeyError 請(qǐng)求一個(gè)不存在的字典關(guān)鍵字
IOError 輸入輸出錯(cuò)誤(比如你要讀的文件不存在)
AttributeError 嘗試訪問未知的對(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中沒有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來完成整個(gè)循環(huán)搅裙。(注意:Python中沒有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ǔ)句千萬不要用一直為真的判斷語(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)系作者
  • 序言:七十年代末怕膛,一起剝皮案震驚了整個(gè)濱河市熟嫩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌褐捻,老刑警劉巖掸茅,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異舍扰,居然都是意外死亡倦蚪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門边苹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來陵且,“玉大人,你說我怎么就攤上這事个束∧焦海” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵茬底,是天一觀的道長(zhǎng)沪悲。 經(jīng)常有香客問我,道長(zhǎng)阱表,這世上最難降的妖魔是什么殿如? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮最爬,結(jié)果婚禮上涉馁,老公的妹妹穿的比我還像新娘。我一直安慰自己爱致,他們只是感情好烤送,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著糠悯,像睡著了一般帮坚。 火紅的嫁衣襯著肌膚如雪妻往。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天试和,我揣著相機(jī)與錄音讯泣,去河邊找鬼。 笑死灰署,一個(gè)胖子當(dāng)著我的面吹牛判帮,可吹牛的內(nèi)容都是我干的局嘁。 我是一名探鬼主播溉箕,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼悦昵!你這毒婦竟也來了肴茄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤但指,失蹤者是張志新(化名)和其女友劉穎寡痰,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體棋凳,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拦坠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了剩岳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贞滨。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖拍棕,靈堂內(nèi)的尸體忽然破棺而出晓铆,到底是詐尸還是另有隱情,我是刑警寧澤绰播,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布骄噪,位于F島的核電站,受9級(jí)特大地震影響蠢箩,放射性物質(zhì)發(fā)生泄漏链蕊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一谬泌、第九天 我趴在偏房一處隱蔽的房頂上張望滔韵。 院中可真熱鬧,春花似錦呵萨、人聲如沸奏属。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)囱皿。三九已至勇婴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嘱腥,已是汗流浹背耕渴。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留齿兔,地道東北人橱脸。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像分苇,于是被迫代替她去往敵國(guó)和親添诉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容