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