您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(guān)如何分析python流程的控制,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
前言:
經(jīng)過簡單的了解python
基本語法和使用后,發(fā)現(xiàn)其都是一些順序執(zhí)行語句,也就是依次執(zhí)行,沒有任何的分支,循環(huán),也不會返回到以前的執(zhí)行語句-流程控制。在實際使用中,當(dāng)然不可避免使用到流程控制語句,但其都要由邏輯表達式進行控制,因此先行介紹一下布爾邏輯。
什么是布爾邏輯?
簡單來講,布爾邏輯就是操作真值。相比大多數(shù)編程語言一樣,Python
也使用布爾邏輯來做決策判斷,使用True
和False表示。一般經(jīng)常使用的有4個布爾邏輯運算符,not、and、or、==。在Python語言的使用中,幾乎所有判斷決策都可以使用這四個邏輯運算符表示。首先我們計算布爾邏輯可能產(chǎn)生的值,假設(shè)a,b兩個變量,那么對于它們來講就有四個非真即假的組合,如下表:F表示FALSE,T表示TRUE
a | b | a==b | a!=b | a and b | a or b | not b |
F | F | T | F | F | F | T |
F | T | F | T | F | T | T |
T | F | F | T | F | T | F |
T | T | T | F | T | T | F |
通過代碼直觀感受下布爾邏輯計算的結(jié)果:
==(邏輯相等), 當(dāng) a 和 b 包含的真 值相同,即都為 True 或都為 False 時,表達 式 a==b 的結(jié)果才為 True
!= (邏輯不等)
and(邏輯與), 僅當(dāng)a和b都為 True 時,布爾表達式的 結(jié)果才為 True,而在其他情況下都為 False
or(邏輯或), 僅當(dāng)a和b至少有一個為 True 時,布爾表達式 a or b 才為 True
not(邏輯非),不真即為假,不假即為真
有計算的地方,就會涉及到計算的優(yōu)先級,對于布爾運算的優(yōu)先級,規(guī)則如下
優(yōu)先級由高到低:
a==b
、a != b
、not a
、a and b
、a or b
舉個例子: not True and False or True,執(zhí)行結(jié)果如下圖True??梢钥吹狡鋱?zhí)行順序為not True,在計算(not Ture) and False,最后是or,那么我們來簡化下,這個求值結(jié)果是不是就是計算 False and False or True
。這也算是優(yōu)化的一小步!當(dāng)然,我們根據(jù)上面的表在考慮一下:and的優(yōu)先級高于or,故而計算False and False 等價于 False。那么最后的表達式也就是計算 False or True。
我們隨機在上一個表達式中添加括號,以圖查看括號對布爾表達式計算的影響。同時,當(dāng)布爾邏輯表達式用于循環(huán)語句或者if條件語句時,也會經(jīng)常遇到包含括號的表達式。如下圖:
所以,當(dāng)需要使用比較復(fù)雜的布爾邏輯表達式的時候,需要特別注意括號的使用!
了解了布爾邏輯的規(guī)則,Python
同其它語言一樣,使用了一定的方法,提高了布爾表達式的計算速度,這個方法被稱為:短路求值。
有興趣的話可以自行深入了解下實現(xiàn)原理
運算規(guī)則 | 運算結(jié)果 |
a or b | 如果 a 為 False,結(jié)果為 b,否則結(jié)果為 a |
a and b | 如果 a 為 False,結(jié)果為 a,否則結(jié)果為 b |
這個邏輯表達式是Python
使用者經(jīng)常用到的,直觀來講,以 True or Any 為例,不論這個Any為什么值,其表達式結(jié)果都是True。同理,False and Any
的結(jié)果為False。但切記,邏輯好用的同時也會對代碼產(chǎn)生可讀性不好的體驗感,可以用下面提到的if條件語句來實現(xiàn)運算規(guī)則體驗一下!
if-條件控制語句,它的作用是使得代碼程序在執(zhí)行的時候按照一定的條件進行決策改變。對于文本處理、腳本開發(fā)、網(wǎng)站開發(fā)、數(shù)據(jù)科學(xué)等各個方向的研究實現(xiàn),幾乎都會使用到if語句。
假設(shè)有個簡單的小需求:開機需要用戶輸入用戶名和密碼,如果正確則讓其登錄,如果不正確告知密碼不正確。
if __name__ == "__main__": while True: scan_user = input('please input your name: ') scan_pass = input('please input your passwd: ') if scan_pass == 'if/else': print('Logging on now!') else: print('your passwd is incorrect!!') print('我不在if/else語句中!')
執(zhí)行結(jié)果:
可以看到,如果變量scan_pass
指向的字符串為"if/else
",就會顯示登錄成功,如果不是,變量為任何值都會提示密碼錯誤。
由此,我們來畫一個if/else的基本語句結(jié)構(gòu):
在Python的使用中,通常會將 : 用作 if 語句頭、循環(huán)頭和函數(shù)頭的結(jié)束標(biāo)記。并且,其中的代碼塊可以包含任意數(shù)量的Python
語句和其它if語句。在Python
編程中,同樣需要縮進代碼塊,不過與其它語言為了美觀相比,Python必須使用縮進來表示一段代碼塊的所屬。如上面那段示例的最后一行代碼,并不在else
語句中。
if/elif
語句是if/else
語句的擴充,很多邏輯的實現(xiàn)不會僅僅只包含兩個條件,它可能包含多個條件。比如某商場設(shè)定的一些優(yōu)惠條件:滿200打八折,滿400打六折,滿800超出400的部分打五折等等。
這樣的代碼實現(xiàn)如下:
if __name__ == "__main__": while True: consumer = int(input('請輸入您的消費金額:')) money = 0 if 200 <= consumer < 400: money = consumer * 0.8 print('您的消費金額是:' + str(money)) elif 400 <= consumer < 800: money = consumer * 0.6 print('您的消費金額是:' + str(money)) elif consumer >= 800: money = 400 * 0.6 + (consumer - 400) * 0.5 print('您的消費金額是:' + str(money))
當(dāng)輸入消費金額之后,程序進入if/elif
語句,按照指定順序依次進行判斷,首先對消費金額進行大于200并小于400的判斷,然后計算出此次消費金額,跳出語句,以此類推。需要注意的是: elif 是 else if 的縮寫,編寫時可以隨意使用,但是每個代碼塊的縮進必須相同。
if/else
語句還有一個比較簡單的寫法,是一種有人喜歡有人不喜歡的寫法。
通常如下:主要看response
那一行代碼,這行代碼就等價于下面的if/else代碼塊。
if __name__ == "__main__": color = input('請問您最喜歡什么顏色?') response = 'blue' if color == 'red' else 'black' print(response) if __name__ == "__main__": color = input('請問您最喜歡什么顏色?') if color == 'red': like = 'blue' else: like = 'black'
條件表達式通常比等價的 if/else
語句簡短,但并非總是與 if/else
語句一樣靈活和易于理解。一般而言,僅當(dāng)條件表達式可讓代碼更簡單時才會使用。
上面的條件控制主要決策執(zhí)行哪一段代碼塊,在編寫代碼時也會涉及到重復(fù)的執(zhí)行某一段代碼,這時就會用到循環(huán)控制語句。在每種語言的使用中,通常會用到的就是for循環(huán)和while循環(huán)兩種循環(huán)控制語句。此處加個小說明:無論老師講課還是日常使用中,經(jīng)常會用到變量i,因為它是index的縮寫。當(dāng)開始使用循環(huán)語句的時候, 通常將 j 和 k 用作其他循環(huán)變量名。
假設(shè)我們需要在屏幕上依次打印數(shù)字0~9,此時我們可以使用循環(huán)語句實現(xiàn),如下:for循環(huán)的第1行被稱為for循環(huán)頭。for 循環(huán)總是以關(guān)鍵字for打頭,接下來是循環(huán)變量(這里為 i),然后是關(guān)鍵字 in。關(guān)鍵字 in 后面通常(但并非總是)是 range(n)
和結(jié)束符號 : 。for 循環(huán)重復(fù)執(zhí)行循環(huán)體(循環(huán)頭后面的語句塊)n 次。
if __name__ == "__main__": for i in range(10): print(i)
每次執(zhí)行循環(huán)時,循環(huán)變量都被設(shè)置為下一個值。默認情況下,初始值為 0,并逐步遞增到 n-1(而不是 n)。
如果要修改循環(huán)的初始值,可在 range 中添加初始值:
if __name__ == "__main__": for i in range(1,10): print(i) #或者給變量i+1 for i in range(10): print(i + 1)
如果需要按照相反的順序打印,則可以按照以下兩個方法:
if __name__ == "__main__": for i in range(10, 0, -1): print(i) for i in range(10): print(10 - i)
for循環(huán)當(dāng)然不止運用于循環(huán)打印,在實際編程中,根據(jù)不同的需要,其可以適用于任何類型的迭代中。例如,使用for循環(huán)讀取文本的行數(shù)據(jù)或者向文本中寫入數(shù)據(jù)等等。
對于while循環(huán),在本人的使用中,對比for
,感受到for循環(huán)更容易使用,但其卻沒有while循環(huán)的靈活性。同樣,我們循環(huán)打印一些數(shù)字:
if __name__ == "__main__": i = 0 while i < 10: print(i) i = i + 1
該代碼與for循環(huán)的執(zhí)行結(jié)果是一樣的,但是直觀來看,while循環(huán)的代碼塊要稍微復(fù)雜一些。while 循環(huán)本身以關(guān)鍵字 while
打頭,這 一行被稱為 while 循環(huán)頭,而它后面縮進的代碼被稱為 while 循環(huán)體。以這個例子我們畫一個while循環(huán)的執(zhí)行流程圖,
如下:
可以總結(jié)一下, while 循環(huán)的控制流程:
1.Python 檢查循環(huán)條件為 True 還是 False(就是之前所闡述的布爾表達式),
如 果為 True,就執(zhí)行循環(huán)體;
如果為 False,就跳過循環(huán)體(即跳出循環(huán))并執(zhí)行后面的語句。
2. 在條件為 True 并執(zhí)行循環(huán)體后,Python 再次檢查條件。只要循環(huán)條件為 True,Python 就不斷執(zhí)行循環(huán)體,直到跳出。
示例程序的第 1 行為 i = 0,在循環(huán)語境下,i=0被稱為初始化語句。與 for 循環(huán)那樣自動初始化循環(huán)變量不同,由編程者負責(zé)給 while 循環(huán)使用的變量指定初始值。而循環(huán)體的最后一行為 i = i + 1,隨著循環(huán)的進行,i 的值不斷遞增,確保循環(huán)終將終止。在 while 循環(huán)中,這一行被稱為遞增語句,在本例中作用是讓循環(huán)變量進行遞增。
這樣看來,for循環(huán)不需要編程者去定義初始化語句和遞增語句,但是在開發(fā)中,使用者通常會發(fā)現(xiàn)這些語句一旦不注意則會導(dǎo)致bug出現(xiàn),這也是為什么說while循環(huán)要比for循環(huán)更加靈活。
while
循環(huán)在使用測試時,通常還有一個特性便是無線循環(huán)執(zhí)行,實現(xiàn)只需要一行代碼while true,只要使用,那么其循環(huán)體便會持續(xù)執(zhí)行下去。在實際生產(chǎn)中,最好使用for循環(huán)來代替這種用法!后續(xù)也會闡述一些跳出循環(huán)的語句來避免。
使用三個簡單的小例子來看下for循環(huán)和while循環(huán)是如何解決相同的問題,同時體會一下二者的不同,這可以讓我們更好的應(yīng)用在實際的編程中去。
本案例輸入一些數(shù)字,然后求出這些數(shù)字的總和。
for循環(huán)實現(xiàn):
if __name__ == "__main__": num = int(input('需要計算多少個數(shù)字:')) sum = 0 for i in range(num): n = input('輸入第' + str(i + 1) + '個數(shù)字:') sum = sum + int(n) print('輸入的數(shù)字總和為:' + str(sum))
while循環(huán)實現(xiàn):
num = int(input('需要計算多少個數(shù)字:')) sum = 0 i = 1 while i <= num: n = input('輸入第' + str(i + 1) + '個數(shù)字:') sum = sum + int(n) i = i + 1 print('輸入的數(shù)字總和為:' + str(sum))
二者實現(xiàn)的結(jié)果如下:
案例中的程序都是將輸入的數(shù)字固定在整數(shù),如果用戶輸入的是浮點數(shù),調(diào)用 int(s) 時將會報錯。當(dāng)然,要支持用戶輸入浮點數(shù)很容易, 只需將int(s)改為float(s)即可。
這個案例需要注意,上面的案例無論使用for循環(huán)或者while
循環(huán)都可以實現(xiàn)需求,但是這個案例可以體驗一下for循環(huán)無法處理,但是while循環(huán)適用的情況。需求:假設(shè)輸入一系列數(shù)字,同樣計算總和,但是并不知道會輸入多少個數(shù)字,并且在輸入結(jié)束時,我們以done
為標(biāo)識。
if __name__ == "__main__": num = input('輸入完成標(biāo)識(or "done"):') sum = 0 while num != 'done': i = int(num) sum = sum + i num = input('輸入完成標(biāo)識(or "done"):') print('輸入的數(shù)字總和為:' + str(sum))
結(jié)果示例1:
結(jié)果示例2:
試想一下,我們不知道會輸入多少個數(shù)字,而是直到輸入標(biāo)識字符才會計算求和。這個代碼塊預(yù)先并不知道循環(huán)體執(zhí)行多少次。
注意代碼中的一些地方:
1. 在循環(huán)體內(nèi),語句的排列順序至關(guān)重要。如果循環(huán)條件為 True,就說明 num 不是 'done',所以假定它是一個整數(shù)。 因此,我們可以將它轉(zhuǎn)換為整數(shù),將其與總和相加。
2. 必須在兩個地方調(diào)用 input:循環(huán)前面及循環(huán)體內(nèi),因為循環(huán)條件判斷輸入是數(shù)字還是 'done'。
3. 不再需要計數(shù)器變量 i。在上一個計算總和的示例中,i 用于記錄輸入了多少個數(shù)字。在日常使用中,程序包含的變量越少,越容易理解、調(diào)試和擴展。
最后在體驗一把二者都可以使用的情況:計算數(shù)字的階乘,即1*2*3*4*...*n
;
if __name__ == "__main__": num = int(input('輸入一個大于0的整數(shù): ')) k = 1; for i in range(2,num+1): k = k * i print(str(num) + '的階乘值:' + str(k)) num = int(input('輸入一個大于0的整數(shù): ')) k = 1; i = 2; while i<=num: k = k * i; i = i + 1 print(str(num) + '的階乘值:' + str(k))
由于python對整數(shù)的最大取值沒有限制,所以可以使用python來計算很大的階乘值。
以上就是如何分析python流程的控制,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。