首頁>技術>

在接觸條件語句之前,我們看到的程式碼都是順序執行的,也就是先執行第1條語句,然後是第2條、第3條……一直到最後一條語句,這稱為順序結構。但是對於很多情況,順序結構的程式碼是遠遠不夠的,比如一個程式限制了只能成年人使用,兒童因為年齡不夠,沒有許可權使用。這時候程式就需要做出判斷,看使用者是否是成年人,並給出提示。在 Python 中,可以使用 if else 語句對條件進行判斷,然後根據不同的結果執行不同的程式碼,這稱為選擇結構或者分支結構。

一、條件語句

Python 中的 if else 語句可以細分為三種形式,分別是 if 語句、if else 語句和 if elif else 語句

(一) if 語句

if 語句的含義及功能:

(1)if在Python中是作為關鍵字存在的;

(2)if在Python中的含義是“如果”;

(3)if語句在Python中起著判斷的功能。

if 語句的語法格式以及執行流程:

(1)if語句的語法格式如下:

if 表示式:    程式碼塊

一個完整的if語句由“if 表示式”+“:”+“程式碼塊”組成。

要注意的是,表示式通常為你所要用if進行判斷的內容(可以是一個單一的值或者變數,也可以是由運算子組成的複雜語句,形式不限,只要它能得到一個值就行。不管“表示式”的結果是什麼型別,if else 都能判斷它是否成立[真或者假]。)。而在表示式書寫完後必須要有冒號“:”,否則系統會報錯。

而程式碼塊由由具有相同縮排量的若干條語句組成。

if語句的語法格式以及執行流程

祥例:應用使用前判斷一個人是否滿18歲,如果未滿不能使用該應用,如果已滿則能使用該應用age=int(input('請輸入您的年齡'))if age < 18:    print('您未達到法定的應用使用年齡,您無法使用該應用。')if age > 18:    print('您已達到法定使用本應用年齡,正在載入中......')

(二)if else 語句

if else 語句的使用規則與if 語句無異,只是在if語句的基礎上增加了else關鍵字的含義以及功能應用。

1.else的含義以及功能:

(1)else是關鍵字;

(2)else在if else 語句中是否則的意思;

(3)else在if else 語句中如果if判斷結果為False,則執行else的功能。如果if判斷結果為True,則執行if的功能,不必執行else的功能。

2.if else語句的格式以及執行流程:

if else語句的格式以及執行流程

同if語句一致,一個完整的if else 語句應同時包含“if 表示式:”+“程式碼塊1”+“else:”+“程式碼塊2”。

所有要注意的地方也基本和if語句一致,最重要的一點就是程式碼塊要想正確執行,在程式碼塊之前必須要有一個tab距離(也即四個空格的距離),如果是巢狀的判斷語句,則程式碼塊在所屬判斷語句下要與判斷語句開頭第一個字母有一個tab距離,例如:

age=int(input('請輸入您的年齡'))if age == 18:    print('您已達到法定的應用使用年齡,可以使用該應用。正在載入中......')    if age < 18:        print('您未達到法定的應用使用年齡,您無法使用該應用。')else:    print('您已達到使用年齡,可以使用該應用。正在載入中......')

(三)if elif else 語句:

在條件語句方面,本質上三種語句語法規則都一樣,但根據不同實際情況的不同應用,誕生有三種不同深度的條件判斷語句。第三種if elif else語句是最為複雜也是最為精確的條件判斷語句。

1.elif的含義及功能:

(1)elif也是一個關鍵字;

(2)elif在if elif else語句中的含義為“否則如果”;

(3)elif永遠存在於if elif else語句的中間,開頭為if語句,中間為elif語句,結尾為else語句。elif永遠不能單獨用於某物判斷的開頭或結尾,否則程式會報錯。

2.if elif else語句的格式以及執行流程:

例項1判斷一個人的身材是否合理:

height = float(input("輸入身高(米):"))weight = float(input("輸入體重(千克):"))bmi = weight / (height * height)  #計算BMI指數if bmi<18.5:    print("BMI指數為:"+str(bmi))    print("體重過輕")elif bmi>=18.5 and bmi<24.9:    print("BMI指數為:"+str(bmi))    print("正常範圍,注意保持")elif bmi>=24.9 and bmi<29.9:    print("BMI指數為:"+str(bmi))    print("體重過重")else:    print("BMI指數為:"+str(bmi))    print("肥胖")

例項2應用程式身份資訊校驗:

import sysprint('歡迎使用XXX應用程式')print('下面是身份資訊認證環節,請準確無誤地輸入您的個人資訊。')age=int(input('請輸入您的年齡:'))if age == 18:    print('您已達到法定的應用使用年齡,可以使用該應用。')elif age < 18:    print('您未曾達到法定的應用使用年齡,不能使用該應用。請退出!')    sys.exit() #sys 模組的 exit() 函式用於退出程式。else:    print('您已達到使用年齡,可以使用該應用。正在載入中......')identity=str(input('請告知您的個人職業:'))id_1='軍人'id_2='警察'id_3='消防員'id_4='應急醫生'id_5=(id_1,id_2,id_3,id_4)if identity == id_5:    print('身份正確,正在進入該應用...')elif identity == id_1:    print('身份正確,正在進入該應用...')elif identity == id_2:    print('身份正確,正在進入該應用...')elif identity == id_3:    print('身份正確,正在進入該應用...')else:    print('身份錯誤!')

if elif else語句的格式以及執行流程

在這種形式中,Python 會從上到下逐個判斷表示式是否成立,一旦遇到某個成立的表示式,就執行後面緊跟的語句塊;此時,剩下的程式碼就不再執行了,不管後面的表示式是否成立。如果所有的表示式都不成立,就執行 else 後面的程式碼塊。

(四)條件語句總結:

1.對語法格式的說明:

“表示式”可以是一個單一的值或者變數,也可以是由運算子組成的複雜語句,形式不限,只要它能得到一個值就行。不管“表示式”的結果是什麼型別,if else 都能判斷它是否成立(真或者假)。“程式碼塊”由具有相同縮排量的若干條語句組成。if、elif、else 語句的最後都有冒號:,不要忘記。

2.條件語句執行方式:

一旦某個表示式成立,Python 就會執行它後面對應的程式碼塊;如果所有表示式都不成立,那就執行 else 後面的程式碼塊;如果沒有 else 部分,那就什麼也不執行。執行過程最簡單的就是第一種形式——只有一個 if 部分。如果表示式成立(真),就執行後面的程式碼塊;如果表示式不成立(假),就什麼也不執行。對於第二種形式,如果表示式成立,就執行 if 後面緊跟的程式碼塊1;如果表示式不成立,就執行 else 後面緊跟的程式碼塊2。對於第三種形式,Python 會從上到下逐個判斷表示式是否成立,一旦遇到某個成立的表示式,就執行後面緊跟的語句塊;此時,剩下的程式碼就不再執行了,不管後面的表示式是否成立。如果所有的表示式都不成立,就執行 else 後面的程式碼塊。總起來說,不管有多少個分支,都只能執行一個分支,或者一個也不執行,不能同時執行多個分支。

3.if else 如何判斷表示式是否成立:

上面說過,if 和 elif 後面的“表示式”的形式是很自由的,只要表示式有一個結果,不管這個結果是什麼型別,Python 都能判斷它是“真”還是“假”。布林型別(bool)只有兩個值,分別是 True 和 False,Python 會把 True 當做“真”,把 False 當做“假”。對於數字,Python 會把 0 和 0.0 當做“假”,把其它值當做“真”。對於其它型別,當物件為空或者為 None 時,Python 會把它們當做“假”,其它情況當做真。比如,下面的表示式都是不成立的:

""  #空字串[ ]  #空列表( )  #空元組{ }  #空字典None  #空值

例項:

b = Falseif b:    print('b是True')else:    print('b是False')n = 0if n:    print('n不是零值')else:    print('n是零值')s = ""if s:    print('s不是空字串')else:    print('s是空字串')l = []if l:    print('l不是空列表')else:    print('l是空列表')d = {}if d:    print('d不是空字典')else:    print('d是空字典')def func():    print("函式被呼叫")if func():    print('func()返回值不是空')else:    print('func()返回值為空')

執行結果為:

b是Falsen是零值s是空字串l是空列表d是空字典函式被呼叫func()返回值為空

(五)if else 對縮排的要求(重點):

上面簡單展示了選擇結構的三種基本形式,並給出了例項演示,但是大家在編寫程式碼過程中仍然要注意一些細節,尤其是程式碼塊的縮排,這對 if else 選擇結構極其重要。Python 是以縮排來標記程式碼塊的,程式碼塊一定要有縮排,沒有縮排的不是程式碼塊。另外,同一個程式碼塊的縮排量要相同,縮排量不同的不屬於同一個程式碼塊。

不要忘記縮排

if、elif 和 else 後面的程式碼塊一定要縮排,而且縮排量要大於 if、elif 和 else 本身。例如,下面的程式碼就是一個反面教材:

age = int( input("請輸入你的年齡:") )if age < 18 :print("警告:你還未成年,不能使用該軟體!")else:print("你已經成年,可以使用該軟體。")

本例中的 print() 函式和 if、else 語句是對齊的,在同一條豎線上,都沒有縮排,所以 print() 就不是 if、else 的程式碼塊了,這會導致 Python 直譯器找不到 if、else 的程式碼塊,從而報出如下錯誤:

SyntaxError: expected an indented block翻譯過來就是:語法錯誤:需要一個縮排的程式碼塊

總之,if、else 後面的程式碼一定要縮排,否則就不能構成 if、else 的執行體。

縮排多少合適?

Python 要求程式碼塊必須縮排,但是卻沒有要求縮排量,你可以縮排 n 個空格,也可以縮排 n 個 Tab 鍵的位置。但是從程式設計習慣的角度看,我建議縮排 1 個 Tab 鍵的位置,或者縮排 4 個空格;它們兩者其實是等價的,很多編輯器都可以將 Tab 鍵設定為 4 個空格,比如,IDLE 中預設 Tab鍵 就是 4 個空格。

所有語句都要縮排

一個程式碼塊的所有語句都要縮排,而且縮排量必須相同。如果某個語句忘記縮進了,Python 直譯器並不一定會報錯,但是程式的執行邏輯往往會有問題。請看下面的程式碼:

age = int( input("請輸入你的年齡:") )if age < 18 :    print("你還未成年,建議在家人陪同下使用該軟體!")print("未成年人如果得到了家長的同意,請忽略以上提示。")  #忘記縮排

這段程式碼並沒有語法錯誤,但是它的執行邏輯是不對的,比如,輸入 16 的執行結果如下:

請輸入你的年齡:24↙未成年人如果得到了家長的同意,請忽略以上提示。

使用者的年齡分明大於18,但是卻出現了“未成年人”的提示,畫面非常尷尬,這是因為第二個 print() 語句沒有縮排,if 沒有把它和第一個 print() 語句當做同一個程式碼塊,所以它不是 if 執行體的一部分。解決這個錯誤也很容易,讓第二個 print() 縮排 4 個空格即可。

同一程式碼塊縮排量要相同

Python 雖然不限制程式碼塊的縮排量,你可以隨意縮排 n 個空格,但是,同一個程式碼塊內的所有語句都必須擁有相同的縮排量,不能一會縮排 2 個空格,一會縮排 4 個空格。下面的程式碼是一個反面教材:

age = int( input("請輸入你的年齡:") )if age < 18 :    print("你還未成年,建議在家人陪同下使用該軟體!")      print("未成年人如果得到了家長的同意,請忽略以上提示。")  #縮排量不對

執行這段程式碼,Python 直譯器會報出語法錯誤:

SyntaxError: unexpected indent翻譯過來就是:語法錯誤:意外的縮排

這段程式碼中,第一個 print() 語句縮進了 4 個空格,第二個 print() 語句縮進了 6 個空格,縮排量不同導致它們不是同一個程式碼塊。Python 會認為第一個 print() 語句是 if 的執行體,而第二個 print() 是一個意外的存在,不知道該把它當做誰的程式碼塊,所以解析失敗,報錯。總之,位於同一個程式碼塊中的所有語句必須擁有相同的縮排量,多一個空格或者少一個空格都不行。

不要隨便縮排

另外需要注意的是,不需要使用程式碼塊的地方千萬不要縮排,一旦縮排就會產生一個程式碼塊。下面的程式碼是一個反面教材:

info = "Python教程的網址是:http://c.biancheng.net/python/"    print(info)

這兩條簡單的語句沒有包含分支、迴圈、函式、類等結構,不應該使用縮排。

(二)條件語句的底層邏輯——條件測試:

Python條件測試表達式用法詳解

1、Python中的真假

1)、任何非0數字和非空物件都為真;

2)、數字0、空物件和特殊物件None均為假;

3)、比較和相等測試會遞迴地應用於資料結構中;

4)、返回值為True或False;

2、Python組合條件測試

X and Y: 與運算

X or Y: 或運算

not X: 非運算

3、Python條件測試內建變數及程式碼塊

break: 跳出最內層的迴圈;

continue: 跳到所處的最近層迴圈的開始處;

pass: 點位語句

else程式碼塊:迴圈正常終止才會執行;如果迴圈終止是由break跳出導致的,則else不會執行;

(三)關係運算符:

關係運算符同數學中的運算子作用一樣,只不過在Python中具體的符號有些不同而已。關係運算符主要可分為“==(等於)”、“!=(不等於)”、“>(大於)”、“<(小於)”、“>=(大於等於)”以及“<=(小於等於)”六類。

關係運算符在程式碼中運算後只會產生倆種結果,也即bool型結果“True”或“False”,而關於倆種結果能給程式碼造成什麼影響,在上文中有所提到,這裡便不再闡釋。

(四)邏輯運算子:

在高中數學中我們學過邏輯運算,例如 p 為真命題,q 為假命題,那麼“p且q”為假,“p或q”為真,“非q”為真。Python 也有類似的邏輯運算,請看下錶:

Python邏輯運算子及功能

邏輯運算子一般和關係運算符結合使用,例如:

14>6 and 45.6 > 90

14>6 結果為 True,成立,45.6>90 結果為 False,不成立,所以整個表示式的結果為 False,也即不成立。

再看一個比較實用的例子:

age = int(input("請輸入年齡:"))height = int(input("請輸入身高:"))if age>=18 and age<=30 and height >=170 and height <= 185 :    print("恭喜,你符合報考飛行員的條件")else:    print("抱歉,你不符合報考飛行員的條件")

1.邏輯運算子可以用來操作任何型別的表示式

Python 邏輯運算子可以用來操作任何型別的表示式,不管表示式是不是 bool 型別;同時,邏輯運算的結果也不一定是 bool 型別,它也可以是任意型別。請看下面的例子:

print(100 and 200)print(45 and 0)print("" or "https://fanyi.baidu.com/")print(18.5 or "https://fanyi.baidu.com/")

執行結果:

2000https://fanyi.baidu.com/18.5

本例中 and 和 or 運算子操作的都不是 bool 型別表示式,操作的結果也不是 bool 值。由此可見網路上某些Python教程關於邏輯運算子用於操作 bool 型別的表示式,執行結果也是 bool 型別的說法是完全錯誤的!

2.邏輯運算子的本質

在 Python 中,and 和 or 不一定會計算右邊表示式的值,有時候只計算左邊表示式的值就能得到最終結果。另外,and 和 or 運算子會將其中一個表示式的值作為最終結果,而不是將 True 或者 False 作為最終結果。以上兩點極其重要,瞭解這兩點不會讓你在使用邏輯運算的過程中產生疑惑。對於 and 運算子,兩邊的值都為真時最終結果才為真,但是隻要其中有一個值為假,那麼最終結果就是假,所以 Python 按照下面的規則執行 and 運算:

如果左邊表示式的值為假,那麼就不用計算右邊表示式的值了,因為不管右邊表示式的值是什麼,都不會影響最終結果,最終結果都是假,此時 and 會把左邊表示式的值作為最終結果。如果左邊表示式的值為真,那麼最終值是不能確定的,and 會繼續計算右邊表示式的值,並將右邊表示式的值作為最終結果。

對於 or 運算子,情況是類似的,兩邊的值都為假時最終結果才為假,只要其中有一個值為真,那麼最終結果就是真,所以 Python 按照下面的規則執行 or 運算:

如果左邊表示式的值為真,那麼就不用計算右邊表示式的值了,因為不管右邊表示式的值是什麼,都不會影響最終結果,最終結果都是真,此時 or 會把左邊表示式的值作為最終結果。如果左邊表示式的值為假,那麼最終值是不能確定的,or 會繼續計算右邊表示式的值,並將右邊表示式的值作為最終結果。

(五)while迴圈:

while迴圈的語法格式如下:

[init_statements]while test_expression :    body_statements    [iteration_statements]

while 迴圈在每次執行迴圈體之前,都要先對 test_expression 迴圈條件求值,如果迴圈條件為真,則執行迴圈體部分。從上面的語法格式來看,迭代語句 iteration_statements 總是位於迴圈體的最後,因此只有當迴圈體能成功執行完成時,while 迴圈才會執行迭代語句 iteration_statements。從這個意義上看,while 迴圈也可被當成分支語句使用,即如果 test_expression 條件一開始就為假,則迴圈體部分將永遠不會獲得執行的機會。

用一個簡單的例子:

number=1 #while迴圈的初始化條件=[init_statements]while number <= 10:  #當number小於10的時候,開始執行迴圈體=test_expression    print('number:',number)   =body_statements    number += 1  #迭代語句=[iteration_statements]print('迴圈結束!')

在使用 while 迴圈時,一定要保證迴圈條件有變成假的時候:否則這個迴圈將成為一個死迴圈,永遠無法結束這個迴圈。例如如下程式碼:

number=1while number <= 10:    print('number:',number)    number -= 1print('迴圈結束')

在上面程式碼中,number 的值越來越小,這將導致 number 的值永遠小於 10,number<10 迴圈條件一直為 True,從而導致這個迴圈永遠無法結束。

與前面介紹分支語句類似的是,while 迴圈的迴圈體中所有程式碼必須使用相同的縮排,否則 Python 也會引發錯誤。例如如下程式:

# 迴圈的初始化條件count_i = 0# 當count小於10時,執行迴圈體while count_i < 10:    print('count_i的值', count_i)count_i += 1

執行上面程式,將會看到執行一個死迴圈。這是由於 count_i += 1 程式碼沒有縮排,這行程式碼就不屬於迴圈體。這樣程式中的 count_1 將一直是 0,從而導致 count_i < 10 一直都是 True,因此該迴圈就變成了一個死迴圈。

總結:關於while迴圈,主要屬於邏輯方面的內容,如果你邏輯思維足夠好,上面關於while迴圈的解釋已經能滿足你while迴圈基礎使用方法的需求。如果你邏輯思維夠嗆,上面的解釋還不能讓你完全理解while迴圈,那麼你需要結合其他人關於Python的while迴圈的解釋來加以理解,但總的來說,自我練習才是最重要的。

下面是while迴圈基礎應用的一個核心例項,利用while迴圈實現九九乘法表:

12
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 個人C++筆記(1) 引用(下)