0基礎學Python之七:條件語句

視頻地址:

0基礎學Python之七:條件語句?

v.qq.com圖標

Hi 大家好,我是王可樂。前面兩節課里,可樂帶大家一起學習了 Python 中字元串的概念和相關操作。現在,你應該已經熟悉了數字、字元串、變數、操作符等知識。從今天開始,可樂開始為大家介紹 Python 中的流程式控制制語句,學習了這些內容之後,我們就可以寫出來有著豐富邏輯的程序了。今天這一節課,我們先來介紹一下條件語句。

在前面的課程里,我們見到的語句都很簡單。例如我們看下面的例子,打開 Python Shell,依次輸入:

>>> x = 2>>> y = Hello.count(l)>>> z = x + y>>> print(Hello * z)HelloHelloHelloHello

我們看到,Python 自上而下依次為我們執行這些語句,最後在屏幕上列印出來了四個連續的 Hello。這類語句屬於簡單語句,一般來說每個語句佔用一行,換行就是開始了新語句。如果一個語句特別長,也可以行尾加上 符號表示語句還沒有結束,然後在下一行繼續書寫。例如,我們輸入:

>>> total = x + y + z

這就是一個語句分成了三行的寫法。一個 Python 程序可以由很多個語句組成,然後 Python 解釋器自上而下依次執行這些語句,也就是順序執行。

有一點需要特殊說明的是,在前面的課程里,我們經常在 Shell 里輸入一些語句來查看它們的值。例如我們輸入 Hello,回車,Shell 在下方顯示 Hello;或者我們定義了變數 x = 1,然後輸入 x + 2 回車,Shell 告訴我們 x + 2 的值為 3。

>>>hellohello>>> x = 1>>> x + 23

除了定義 x 的賦值語句之外,其他兩個是一種特殊的語句,這種語句只在交互模式下有用,寫在 Python 腳本里的話則什麼功能都沒有。例如,我們用 Sublime 編寫這樣一個文件:

x = 1x + 2Hello, world

然後保存為文件 test.py,放在 C:colecode 目錄里。然後打開命令行終端,cd 切換到我們的代碼目錄(輸入) cd C:colecode,回車;然後執行這個腳本:python test.py。可以看到,Python 什麼都沒有顯示就直接退出了。

事實上,這些語句雖然是合法的語句,但在屏幕上顯示結果卻不是它們的功能。在 Python 解釋器的交互模式下,也就是我們在 Python Shell 里執行這些語句時,解釋器會執行這些語句,並把算出來的值列印出來給我們看;但是在Python 解釋器的普通模式下,Python 只是執行這些語句,得到它的值,然後就丟掉了,並不 會為我們互動式地列印出來語句的值。

使用前面介紹的簡單語句,我們可以完成計算、賦值、執行函數等許多功能,但是我們的程序也只能自上而下一句一句執行。如果程序里需要更複雜的功能邏輯,就需要用到條件語句等流控制語句了。

那麼什麼是條件語句呢?顧名思義,條件語句就是按照條件來執行的語句。我們還是先來看一個例子。打開你的終端程序,可樂這裡是在"運行"對話框里輸入 cmd 命令, 打開了 Windows 的命令提示符。然後輸入命令 python,回車,進入打開 Shell 模式。輸入:

>>> x = 10>>> if x > 5:... print({0} is greater than 5.format(x))...10 is greater than 5

從這個例子開始,可樂將會使用 Python 解釋器的 Shell 模式給大家演示代碼。這是因為可樂發現,IDLE 的 Shell 模式在書寫多行代碼的時候對齊很不好看。第一行代碼前面有三個大於號的提示符,而第二行代碼開始都是頂格對齊的;而 Python 解釋器的 Shell 模式則從第二行開始有三個點的提示符,與第一行的三個大於號提示符對應,使得代碼書寫起來更好看。如果大家習慣了 IDLE,也可以使用它來試驗可樂的例子,只是在縮進方面要特別注意哦。

好了,輸入完代碼,我們按回車,然後再按回車。可以看到,屏幕上列印出來了 10 is greater than 5。我們換一個 x 的值來試試,輸入:

>>> x = 1>>> if x > 5:... print({0} is greater than 5.format(x))...

回車兩次。這一次,屏幕上什麼都沒有列印出來。

這個例子就是一個典型的條件語句,我們來看一下。if 是條件語句的關鍵詞,表示開始一個條件語句;關鍵詞後面緊跟著的 x > 5 是條件表達式,它是控制條件語句的行為,當條件滿足時,就執行後面的語句;條件表達式之後跟一個冒號,表示條件結束;然後在下一行里,我們先打了四個空格,然後寫了一個 執行 print 函數的語句。

在這裡,四個空格非常重要。和很多其他編程語言不同,Python 語言的發明人非常重視代碼的格式,以至於格式不符合規定的代碼都無法運行。這裡的四個空格表示一層縮進,意思是 print 語句是 if 條件語句的子語句。如果我們想在 if 條件滿足時執行多個語句,只需要在同一縮進層級上依次把多個語句順序寫下來就可以了,例如:

>>> x = 1>>> y = 2>>> if x < y:... print(x)... print(y)...12

這裡,兩個 print 語句都是 if 條件語句的子語句,他們都只在條件滿足時才會執行。Python 通過強制規定使用縮進,使得代碼的格式反應了其邏輯層次,代碼更容易閱讀。這個強制規定也使得 Tab 鍵與空格混用的情況成為了不可能,雖然很多編輯器里 Tab 鍵和四個空格看起來都是一樣長度的空白,但是混用它們的話,Python 代碼就會因為縮進層級混亂而報錯。此外,雖然 Python 並沒有強行規定使用四個空格,如果所有縮進都使用兩個空格或者一個 Tab 符,那也是可行的,但是為了代碼美觀,我們還是堅持在所有縮進的地方都使用四個空格。

條件語句還可以添加一個 ELSE 子句,意思是當條件不滿足時,執行 ELSE 子句的內容。例如,我們稍稍修改一下剛才的例子:

>>> x = 1>>> y = 2>>> if x > y:... print(x)... else:... print(y)...>>> 2

我們看到,這個語句列印了 y 的值 2,因為 x > y 條件為 False。書寫 EISE 子句時,else 關鍵字要和對應的 if 關鍵字保持在同一縮進層級;另外不要忘記了 else 關鍵詞後面的冒號;最後,else 後面跟隨的子句和 if 後面跟隨的子句一樣,都要縮進四個空格。

條件語句還可以嵌套使用,條件語句的子語句也可以是條件語句。我們來看一個稍稍複雜的例子 :

>>> x = 42>>> if x < 5:... print(x < 5)... else:... if x < 10:... print(x >= 5 and x < 10)... else:... if x < 50:... print(x >= 10 and x < 50)... else:... print(x > 50)...x >= 10 and x < 50

在這個例子里。這個判斷 x 是否小於 10 的 if else 語句,嵌套在判斷 x 是否小於 5 的 else 語句里;而判斷 x 是否小於 50 的 if else 語句,則嵌套在判斷 x 是否小於 10 的 else 語句里。得益於 Python 對格式的嚴格要求,從縮進層級上面,我們也能很清楚的看到這段代碼的邏輯。

條件語句可以無限嵌套,因此也可以表達非常複雜的邏輯。不過,過多的嵌套層次也會導致代碼的可讀性下降,因此可樂建議大家寫代碼前想清楚要表達的意思,寫出邏輯清晰、易維護的代碼。

Python 的條件語句還支持另一個關鍵字 elif,它表示 else if。在條件分支較多時,使用 elif 子句可以避免過多的嵌套層級。我們還是來演示一下,把上面的複雜嵌套語句用 elif 改寫一下:

>>> x = 42>>> if x < 5:... print(x < 5)... elif x < 10:... print(x >= 5 and x < 10)... elif x < 50:... print(x >= 10 and x < 50)... else:... print(x > 50)...x >= 10 and x < 50

這段代碼和前面我們演示的嵌套 if else 代碼表達了同樣的意思,但是看起來更加整齊,也更加容易理解。其中的 elif 子句可以重複任意多次,只有第一個滿足條件的子句才會被執行,而它之後的所有子句都會被忽略。

在前面的條件語句中,我們一直在使用比較表達式來作為條件。一個比較表達式會產生一個 True 或者 False 的值,也就是布爾類型的值(屏幕提示 bool),當表達式為 True 時就是滿足了條件,而表達式為 False 時則不滿足條件。

條件語句的條件可以更加複雜。首先,我們可以使用更加複雜的比較表達式,或者比較複雜的布爾表達式。例如:

>>> x = 6>>> s = Hello>>> if x > 5 and x < 10 and H in s and not 0 == x % 4:... print(OK)...OK

這個 if 語句里的條件包括四部分,使用 and 邏輯運算符連接,也就是只有全部條件都滿足時才會執行 print OK 這個語句。總的來說,執行條件語句時,Python 會先對 if 或者 elif 後面的表達式求值,如果求值得到 True,那麼就執行 if 或者 elif 子句;如果得到 False,那就向後繼續判斷 elif 條件,或者執行 else 語句,或者如果沒有其他語句了,就結束條件語句的執行。

此外,我們看到,條件里不僅可以用比較表達式,還可以用 H in s 等運算來作為條件。這些語句都產生 True 或者 False 的布爾值,實際上,條 件語句的條件不僅可以使用產生布爾值的表達式,還可以用很多其他的表達式,例如:

>>> if 0:... print(OK)... else:... print(Not OK)...Not OK

這句話執行的結果是什麼呢?回車,我們看到,是 Not OK。這裡,如果條件語句的條件是一個整數,或者產生整數的表達式,那麼當結果為非 0 時才算滿足了條件,只有結果為 0 時我們認為不滿足條件。

其實 Python 條件表達式還可以是其他的很多類型,當表達式為該類型的非零值時,我們認為滿足了條件。例如浮點數類型的條件為非 0.0;複數類型的條件為非 0+0j;字元串類型的條件為非空字元串,以及後面我們要講到的非 None,非空列表和非零列表、元組、字典等。而對於布爾類型的值,它只有兩個取值,其中 False 是零值,而 True 則是非零值。

不過,雖然 Python 允許我們靈活使用其他類型的表達式作為條件,但是可樂建議大家堅持使用布爾類型的表達式作為條件。

例如,(打開 Shell)假如我們要判斷一個值 x 是否為非 0,並且在 x 為非零時執行一個語句,我們寫條件 if x :可以達到這個目的,但是這種寫法是不推薦的,因為它並不直觀易懂。可樂推薦大家顯式的寫作 if x != 0 :,這樣雖然多打了幾個字母,但代碼的意圖更加清晰了,是更好的寫法。

>>> if x:>>> if x != 0:

以上介紹這些,就是我們今天的內容。這節課里,可樂 帶大家一起學習了如何使用條件語句,有了條件語句這個強大的工具,我們就可以實現一些較為複雜的邏輯了。這節課後,可樂希望大家再回顧一下我們第二節課里猜數字遊戲代碼,看看那裡的條件語句是如何工作的。

下一節課里,可樂會開始為大家介紹一個更加強大的工具,循環語句。計算機的一個優勢就是可以快速、精確而又不知疲倦的為我們執行很多重複的工作,循環語句就是實現重複的基本組件,敬請期待哦,我們下期見。


推薦閱讀:

Python的1001種騷操作——基礎篇(1)
藏頭詩人李白——Python的簡單實現
【Python3網路爬蟲開發實戰】1.6.1-Flask的安裝
Python 中用列表中的字元串元素作為名字來創建新變數
python 如何處理提取嵌套中括弧 [] 的內容?

TAG:Python | 零基礎 | 編程 |