一、條件判斷(在什么條件下髓帽,該去做什么菠赚。)
python能夠完成自動化,是因為可以執(zhí)行條件判斷
圖片發(fā)自簡書App
圖片發(fā)自簡書App
一郑藏、單向判斷衡查,if
那么,這段代碼是如何實現(xiàn)的呢必盖?
首先拌牲,第一行代碼,用賦值運算符=對當(dāng)前情況進(jìn)行賦值:將你擁有的寶石個數(shù)6賦值給變量——寶石數(shù)stonenumber歌粥。
第二步塌忽,確定if條件:如果變量stonenumber的值>=個數(shù)6時,就執(zhí)行冒號后失驶,下一行的命令土居。
第三步,用print()命令打印出結(jié)果:你擁有了毀滅宇宙的力量。
所以擦耀,if語句的單向判斷邏輯棉圈,我們可以這樣歸納:
圖片發(fā)自簡書App
在這里,你可能注意到了一個細(xì)節(jié):在條件判斷代碼中的冒號:后眷蜓、下一行內(nèi)容的前面迄损,會空幾個格,但這是為什么呢账磺?
圖片發(fā)自簡書App
首先芹敌,在計算機(jī)的溝通語言中,空格的學(xué)名叫縮進(jìn)垮抗,比如我們寫文章都要空兩個格氏捞,這就叫首行縮進(jìn)。
對于Python而言冒版,冒號和縮進(jìn)是一種語法液茎。它會幫助Python區(qū)分代碼之間的層次,理解條件執(zhí)行的邏輯及先后順序辞嗡±Φ龋【注:縮進(jìn)是四個空格或一個Tab鍵】
并且,在if條件語言中续室,縮進(jìn)不需要我們手動按空格鍵栋烤。當(dāng)你用英文輸入法打:后按回車,我們的開發(fā)工具(用來編寫Python代碼的程序)為了方便大家編程挺狰,會自動實現(xiàn)下一行代碼明郭,向右縮進(jìn)的功能。
此時丰泊,被縮進(jìn)的內(nèi)容(print()函數(shù))和if條件語句組成了一個代碼塊(一個整體)薯定,成為了if條件下的內(nèi)部命令。
小結(jié)一下單向判斷:if的代碼邏輯及語法格式:
圖片發(fā)自簡書App
請修改下方代碼框中無限寶石的代碼:在if條件不變的情況下瞳购,修改第一行的賦值語句话侄,把【stonenumber=6】改為【stonenumber=2】,并點擊運行学赛,看看會出現(xiàn)什么結(jié)果年堆。
圖片發(fā)自簡書App
圖片發(fā)自簡書App
你可能會在心里犯嘀咕:為什么連個報錯都沒有呢?那么罢屈,我來解釋一下這是怎么回事嘀韧。
首先,第一行的賦值語句【stonenumber=2】是后面if條件判斷語句的前提情況缠捌,然而并不滿足『stonenumber>=6』這個條件锄贷,所以不會執(zhí)行條件下的『print』操作译蒂。
老師講過,計算機(jī)是一行行往下執(zhí)行代碼的谊却。所以柔昼,當(dāng)?shù)谝恍匈x值情況的前提不滿足if的條件時,Python的邏輯就會判斷:條件不滿足炎辨,無法執(zhí)行if條件下的命令捕透,從而自動跳過,執(zhí)行下一行命令碴萧。
圖片發(fā)自簡書App
但是乙嘀,在上方代碼中,除了if之外破喻,我們并沒有設(shè)置其他的命令去讓Python執(zhí)行虎谢。因此,Python自然就無法輸出結(jié)果曹质。
也就是說葫隙,由于寶石數(shù)量只有2锹漱,沒有滿足6顆寶石的if條件,if條件下的打印命令就無法生效蔽莱,自然沒辦法獲得摧毀宇宙的力量躬拢。
而作為最強(qiáng)反派乒裆,滅霸當(dāng)然不會就此善罷甘休痰催。他要繼續(xù)尋找寶石涌乳,直到集齊6顆,達(dá)到他的目的坏为。
那么究驴,這個如果6顆寶石的條件沒滿足,就做其他事情——尋找寶石的判斷匀伏,在Python中要如何實現(xiàn)呢?
那么蝴韭,這個如果6顆寶石的條件沒滿足够颠,就做其他事情——尋找寶石的判斷,在Python中要如何實現(xiàn)呢榄鉴?
二履磨、雙向判斷:if…else…
圖片發(fā)自簡書App
在搶奪了收藏家手里的寶石后,擁有三顆寶石的滅霸逼迫自己的養(yǎng)女卡魔拉庆尘,說出了第四顆靈魂寶石的下落——沃彌爾星剃诅。
在Python宇宙,我們可以利用if的雙向判斷形式:if…else…去實現(xiàn)這個行動:當(dāng)寶石數(shù)量還沒達(dá)到6顆的時候驶忌,需要帶著卡魔拉去沃彌爾星尋找靈魂寶石矛辕。
下面笑跛,請你直接運行下面的代碼,看程序是如何識別的:
圖片發(fā)自簡書App
很多時候聊品,我們不能把雞蛋放在一個籃子里飞蹂,要做好兩手準(zhǔn)備:如果不滿足條件時,我們要怎么辦翻屈。
Python則很貼心地陈哑,讓我們借用if…else…語句,讓碼農(nóng)們有了另一種選擇——【如果…不滿足伸眶,就…】
圖片發(fā)自簡書App
在if...else條件語句中惊窖,if和else各自抱團(tuán),形成兩個不同的代碼塊厘贼。表示的是條件和其他條件的互斥關(guān)系——如果不滿足if條件爬坑,就執(zhí)行else其他條件。
圖片發(fā)自簡書App
如果用我們上面寶石的例子講解的話涂臣,if定義的就是寶石數(shù)>=6盾计,而else定義的則是寶石數(shù)<6。
圖片發(fā)自簡書App
而由于賦值【stonenumber=3】赁遗,并不滿足【if stonenumber>=6:】這個條件署辉,所以不能執(zhí)行【print('你擁有了毀滅宇宙的力量')】的命令。
只能走第二條else:的路——執(zhí)行print('帶著卡魔拉去沃彌爾星尋找寶石')的結(jié)果岩四。
圖片發(fā)自簡書App
下面哭尝,我們來做個題鞏固一下if...else...的知識點:前天晚上,醬醬無比糾結(jié)自己要不要吃夜宵剖煌,所以她打算上秤稱一下材鹦,如果體重超過100斤,就不吃了耕姊,沒有的話桶唐,就放心吃。結(jié)果……剛好101斤(淚目)……
請在下面代碼框里用if...else...把醬醬的夜宵判斷語句寫出來茉兰∮仍螅【要點提示:1. 為醬醬的體重weight賦值;2. 開始判斷规脸,如果if體重超過100斤坯约,打印結(jié)果不吃了,否則else莫鸭,打印結(jié)果放心吃吧闹丐;3. if和else語句后需跟英文冒號:】
圖片發(fā)自簡書App
圖片發(fā)自簡書App
關(guān)于if...else...的相關(guān)知識點到這里就講完了,我們來總結(jié)一下if…else…語句的知識點被因。
圖片發(fā)自簡書App
代碼講解告一段落卿拴,我們再回到滅霸的故事中衫仑,在連續(xù)的戰(zhàn)斗之后,滅霸無限寶石的收集之旅巍棱,只差最后一顆——心靈寶石惑畴。
不巧的是,這顆寶石鑲在了超級英雄幻視的頭上航徙∪绱幻視深知想要阻止滅霸,只能請求紅女巫到踏,毀掉自己頭上的寶石杠袱。
所以,擺在紅女巫面前的問題條件是:滅霸已經(jīng)擁有5顆寶石窝稿,如果寶石數(shù)大于等于6楣富,世界會被滅霸毀滅。
但是伴榔,如果想讓寶石數(shù)停留在5個及以下纹蝴,她必須要親手毀掉幻視頭上的寶石,同時踪少,還要從滅霸手中至少奪回一顆寶石塘安,才會有勝利的希望。
或者援奢,還有第三種勝利的可能——如果想讓滅霸手中一個寶石都沒有兼犯,讓一切都未曾發(fā)生,那么我們需要穿越時空集漾,回到過去切黔。
那么,這三個如果在Python中要如何實現(xiàn)呢具篇?
三纬霞、多向判斷:if…elif…else…
圖片發(fā)自簡書App
國際慣例,在思考如何用代碼實現(xiàn)某個目標(biāo)時栽连,首先险领,我們需要先來梳理一下邏輯。
通過上面的故事情節(jié)我們知道秒紧,在代碼中,我們需要添加三個如果:如果寶石數(shù)>=6挨下,如果0<寶石數(shù)<=5熔恢,如果寶石數(shù)=0。并產(chǎn)生3個對應(yīng)的執(zhí)行結(jié)果臭笆。
那么叙淌,在判斷3個或3個以上的條件時秤掌,我們就需要借助Python中的多向判斷命令:if…elif…else…。
這三者共同構(gòu)成了多向判斷的命令邏輯關(guān)系:如果if的條件不滿足鹰霍,就按順序看是否滿足elif的條件闻鉴,如果不滿足elif的條件,就執(zhí)行else的命令茂洒。
并且孟岛,當(dāng)判斷的條件超過3個時,中間的多個條件都可以使用elif督勺。
圖片發(fā)自簡書App
那么渠羞,這個代碼要怎么寫呢?我們還是在代碼中來感受一下elif的邏輯智哀,直接點擊運行就好:
圖片發(fā)自簡書App
通過上面if和else的積累次询,多向判斷elif的邏輯是不是很好理解?
首先瓷叫,第一行的賦值屯吊,會按照從上到下的順序挨個試一遍,看自己滿足哪個條件摹菠,滿足了就不往下走盒卸,不滿足就繼續(xù)試,試到出結(jié)果為止辨嗽。
其次世落,elif的運行本質(zhì)上和else一樣,已經(jīng)帶有其他條件的意思糟需,所以elif后可以不接else屉佳。
比如上面的代碼,stonenumber=5會對下面的if elif else條件逐個掃描洲押,看看自己滿足哪一個武花,就執(zhí)行哪個條件底下的命令。
很顯然杈帐,第二個條件elif 0<stonenumber<=5剛好能與stonenumber=5的前提相匹配体箕,于是,執(zhí)行elif底下的命令:print('紅女巫需要親手毀掉幻視額頭上的心靈寶石')**挑童。
下面累铅,請你練習(xí)一下,試著不要看剛才的代碼站叼,參考下面的提示娃兽,自己來重寫一遍剛才我們學(xué)過的那段代碼,通過修改寶石數(shù)的賦值語句尽楔,讓輸出結(jié)果變?yōu)樾枰@奇隊長逆轉(zhuǎn)未來投储。
圖片發(fā)自簡書App
提示:(1)為寶石數(shù)量賦值(數(shù)量為0)(2)條件1:如果寶石數(shù)量>=6第练,顯示你擁有了毀滅宇宙的力量(3)條件2:如果0<寶石數(shù)量<=5,顯示紅女巫需要親手毀掉幻視額頭上的心靈寶石(4)條件3:如果是其它情況玛荞,顯示需要驚奇隊長逆轉(zhuǎn)未來
步驟有了娇掏,下面請你來“逆轉(zhuǎn)未來”:
圖片發(fā)自簡書App
下面,我們來總結(jié)一下elif的知識點
圖片發(fā)自簡書App
二勋眯、if嵌套
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 但是婴梧,不管復(fù)仇者聯(lián)盟怎么竭盡全力,最終凡恍,滅霸還是打出了響指志秃。所有人在一瞬間面臨著分離與死亡。
即使套著超級英雄的外衣嚼酝,蜘蛛俠彼得·帕克也僅僅是個18歲的高中生浮还。他曾只顧忙著在街頭巷尾當(dāng)平民英雄,結(jié)果在期末歷史考試?yán)镏豢剂?6分闽巩,榮獲“學(xué)渣”提名钧舌。
但這個“學(xué)渣”評價并不是隨便來的,而是通過規(guī)則一步步過濾出來的:
圖片發(fā)自簡書App
像這種如果底下還有如果涎跨、條件里還套條件的情況洼冻,我們?nèi)绾斡肞ython把上面的規(guī)則寫出來,并得出評價呢隅很?
答案就是——嵌套條件撞牢。
if嵌套的應(yīng)用場景,簡單來講就是:在基礎(chǔ)條件滿足的情況下叔营,再在基礎(chǔ)條件底下增加額外的條件判斷屋彪。
就像上面的基礎(chǔ)條件是60分及格,想要判斷優(yōu)秀和一般還要增加額外條件——是否大于等于80绒尊。
因此畜挥,彼得·帕克的成績評價規(guī)則,用if嵌套可以像下方代碼這樣:
圖片發(fā)自簡書App
居然出現(xiàn)了三個扎心的結(jié)果……那么婴谱,在Python中蟹但,我們?nèi)绾瓮瑫r得出不及格、學(xué)渣谭羔、程序結(jié)束這三個結(jié)果的呢华糖?
首先,我們先從整體總覽一下瘟裸,這段彼得·帕克成績評價規(guī)則的代碼缅阳,總共分為四部分【賦值、if景描、else十办、print()】,兩個大代碼組超棺。
圖片發(fā)自簡書App
并且向族,在代碼組1的if條件和代碼組2的else的條件下,又包含了條件判斷命令if...else...棠绘。
那么件相,這種嵌套命令我們要如何理解呢?
首先氧苍,我們知道夜矗,縮進(jìn)相同的命令處于同一個等級,第一步让虐,計算機(jī)就要按順序一條一條地執(zhí)行命令紊撕。
那么,計算機(jī)執(zhí)行的順序就是:(1)先給historyscore賦值赡突;
(2)因為if和else是只能留一個的互斥關(guān)系对扶,if和else下的代碼塊只會執(zhí)行一個,所以計算機(jī)要判斷賦值的內(nèi)容滿足【historyscore>=60】還是【historyscore<60】的條件——如果滿足if的條件惭缰,就執(zhí)行if縮進(jìn)下的內(nèi)容浪南,如果不滿足就執(zhí)行else縮進(jìn)下的內(nèi)容;
(3)執(zhí)行print('程序結(jié)束')漱受。
下面络凿,吳楓老師又要開啟提問模式了,如果回答正確請找醬醬學(xué)姐給你放煙花鞍合邸:
圖片發(fā)自簡書App
答案是C絮记,else條件代表的范圍是historyscore<60,包含historyscore=26紧憾。會執(zhí)行else代碼塊:else:到千,而不會執(zhí)行if代碼塊:**if historyscore>=60。
經(jīng)過判斷赴穗,我們知道了憔四,蜘蛛俠26分的歷史成績要找else代碼塊:else:。然而般眉,問題又來了了赵,else代碼塊后面不僅跟著三個print(),還有if甸赃,所以我到底要輸出哪個柿汛?
所以,計算機(jī)語法的執(zhí)行邏輯永遠(yuǎn)都不會變,else下的代碼也要一行一行往下執(zhí)行络断,并根據(jù)條件判斷運行對應(yīng)層級裁替,輸出對應(yīng)結(jié)果。
圖片發(fā)自簡書App
所以貌笨,我們的運行順序是弱判,先輸出的結(jié)果不及格,然后再判斷歷史成績26分的賦值符合歷史成績<60分且<30分還是歷史成績<60分且>=30分的條件锥惋。
下面昌腰,我們再通過一張導(dǎo)圖理一下if嵌套的邏輯,老師建議你把這張圖收藏起來膀跌,接下來寫嵌套代碼的時候可以翻看:
圖片發(fā)自簡書App
要注意的是遭商,elif也是可以放進(jìn)嵌套里的。
是不是很有趣捅伤?那么下面劫流,吳楓老師來教你一個寫嵌套條件代碼的小技巧。
三暑认、如何寫嵌套代碼
if嵌套由于涉及多個條件判斷困介,并且是條件套條件的判斷,所以為了理清邏輯蘸际,我們可采用扒洋蔥大法寫if嵌套座哩。
用“彼得·帕克的歷史成績”舉例,第一步就要搞定最外層那張皮粮彤,將最基礎(chǔ)的命令和條件寫出來根穷。
那么,我們的思考邏輯應(yīng)該是這樣(1)把彼得·帕克26分的歷史成績賦給變量historyscore导坟;(2)用if…else寫最基礎(chǔ)判斷條件如果historyscore>=60時屿良,打印你已經(jīng)及格,否則惫周,打印不及格尘惧;(3)用print()輸出程序結(jié)束。
來來來递递,跟老師動起來喷橙,請根據(jù)上面提示寫一遍代碼,并點擊運行登舞》∮猓看在成績?yōu)?6分的賦值情況下,只套了一層“條件判斷”皮的代碼菠秒,會出現(xiàn)怎樣的結(jié)果:
圖片發(fā)自簡書App
運行通過了嗎疙剑?正確的話,你應(yīng)該會看到終端顯示不及格、程序結(jié)束言缤。老師的答案是這樣子的:
第二步嚼蚀,在“第一層皮”里裝東西。也就是在條件【historyscore>=60】下轧简,增加額外條件驰坊。
其中,額外條件1:當(dāng)歷史成績大于80分哮独,顯示結(jié)果你很優(yōu)秀;額外條件2:當(dāng)歷史成績在60到80分之間察藐,顯示結(jié)果:你只是一般般皮璧。
下面,請你先瞄一眼正確的代碼分飞,并注意我是怎樣安排額外條件的代碼的悴务。
圖片發(fā)自簡書App
圖片發(fā)自簡書App
圖片發(fā)自簡書App
最后一步,你要為另一個大條件else增加額外條件了譬猫!
請你以下方代碼框中的代碼為基礎(chǔ)讯檐,在else底下增加兩個額外條件。
其中染服,額外條件1:當(dāng)歷史成績小于60别洪,同時還小于30時,輸出結(jié)果學(xué)渣柳刮;額外條件2:當(dāng)歷史成績小于60挖垛,但大于等于30時,輸出結(jié)果還能搶救一下秉颗。
圖片發(fā)自簡書App
圖片發(fā)自簡書App
最后的最后痢毒,我們來總結(jié)一下整節(jié)課的知識點:
圖片發(fā)自簡書App