申明: 本站飛宇網 https://feiyetopro.blogspot.com/。自網路收集整理之書籍、文章、影音僅供預覽交流學習研究,其[書籍、文章、影音]情節內容, 評論屬其個人行為, 與本網站無關。版權歸原作者和出版社所有,請在下載 24 小時內刪除,不得用作商業用途;如果您喜歡其作品,請支持訂閱購買[正版]。謝謝!
第5章 用if和else來提問
在編寫程式時,我們經常要問是與否的問題,然後根據答案決定做什麼事情。例如,我們可能會問:“你的年紀大於20歲嗎?”然後,如果答案是“是”則回應:“你太老了!”
這類問題叫做“條件”問題,我們會把這些條件和回應結合到if(如果)語句中。條件陳述式可以比單個問題更複雜,if語句也可以合併多個問題以及依據每個問題的答案不同來做出不同的回應。
在這一章裡,你會學習到如何用if語句來寫程式。
5.1 if語句
在Python中if語句可以這樣寫:
if語句是由if關鍵字構成的,後面跟著一個條件和一個冒號(:),例如if age > 20:。冒號之後的代碼行必須放到一個語句塊中,如果問題的答案是“是”的話(用Python程式設計的術語來講就是True,也就是“真”),就會運行語句塊中的命令。現在,讓我們來看看如何寫語句塊和條件。
5.2 語句塊就是一組程式語句
代碼中的語句塊就是組合在一起的一組程式語句。例如,當if age > 20為真時,你可能不只是想列印出“你太老了!”,也許你還想列印出一些別的句子,比如:
這個代碼塊由三個print語句組成,只有當條件age > 20為真時才會運行。和前面的if語句相比,這個代碼塊中的每一行前面都有四個空格。讓我們把空格變得可見,再來看看這段代碼:
在Python中,空白是有意義的,比如定位字元(tab,當你按tab鍵插入就輸入了一個定位字元)或者空格(按空白鍵插入)。處於同一位置的代碼(相對左邊縮進了同樣數量的空格)組成一個代碼塊。只要你新起一行並用了比前一行多的空格,那麼你就開始了一個新的代碼塊,這個代碼塊是前一個代碼塊的一部分,如圖5-1所示。
我們把這些語句組合在一起因為它們是相關的。這些語句要一起運行。
當你改變縮進時,你其實就是在建立新的代碼塊。圖5-2的例子僅通過改變縮進就建立了三個不同的代碼塊。
這裡,雖然代碼塊2和3有相同的縮進,但它們是不同的代碼塊,因為中間隔著一段縮進較少(更少的空格)的代碼塊。
還有一點要注意,在一個代碼塊中如果一行有四個空格而下一行有六個,這在運行時會產生一個縮進錯誤。因為Python期望你在一個代碼塊中對所有行使用相同數量的空格。
我把空格變得可見讓你可以看出區別來。請注意第三行有六個空格而不是四個。
如果你要運行這段代碼,IDLE會把它看到錯誤的那一行用紅色塊標記起來,並且顯示一條SyntaxError消息(語法錯誤):
Python不希望看到第二個print語句行的前面多了兩個空格。

使用一致的空白(空格)來讓你的代碼更容易讀。如果你開始寫一段程式並且在代碼塊之前使用四個空格,那麼你應該在你的程式中對其他代碼塊也保持使用四個空格。並且,要確保對於同一個代碼塊中的每一行都用同樣數量的空格縮進。
5.3 條件陳述式幫助我們做比較
條件就是用來做比較的程式語句,它告訴我們比較的結果是真(True,或者說“是”)還是假(False,或者說“否”)。例如,age > 10是一個條件,它就相當於:“變數age的值比10大嗎?”下面也是一個條件:hair_color == ‘黑色’,就相當於問:“變數hair_color的值是‘黑色’嗎?”
在Python裡我們用符號(叫做“運算子”)來創建條件,比如等於、大於和小於。表5-1列出了一些用於條件的符號。
表5-1 用於條件的符號
|
符號 |
定義 |
|
== |
等於 |
|
!= |
不等於 |
|
> |
大於 |
|
< |
小於 |
|
>= |
大於等於 |
|
<= |
小於等於 |
例如,如果你10歲了,那麼條件your_age == 10就應該返回真,否則就返回假。如果你是12歲,那麼條件your_age > 10就應該返回真。
注意:當定義等於條件時請務必用兩個等於號(==)。
讓我們再試幾個例子。下面,我們把age設置為等於10,然後寫一個條件陳述式讓它在age大於10的時候列印“你年紀太大,看不懂我的笑話!”。
在我們把這段代碼輸入到IDLE中然後按回車會發生什麼?
什麼也不會發生。
因為age返回的值並不大於10,Python不會執行那句帶print的語句塊。然而,如果我們當初把變數age設置為20的話,資訊就應該會被列印出來。
現在讓我們把前面的例子改成大於或等於的條件:
你應該會看到螢幕上列印出“你年紀太大,看不懂我的笑話!”,因為age的值等於10。
下面,我們嘗試用一下等於(==)條件:
你應該在螢幕上看到“什麼盤子是彎的?U盤!”。
5.4 if-then-else語句
If語句除了在條件滿足時(為真時)可以用來做些事情,在條件不為真時也可以使用。例如,我們可以在你的年紀是12歲時在螢幕上列印一個消息,在不是12歲(為假時)時列印另一個消息。
這裡的技巧是使用if-then-else語句,它相當於說:“如果某事為真,那麼這樣做;否則那樣做。”讓我們來創建一個if-then-else語句。在Shell程式中輸入如下代碼:
因為我們把變數age設置為12,然後條件又問age是不是等於12,所以你應該在螢幕上看到第一條消息被列印出來。現在試著把變數age的值改成一個不是12的值,就像這樣:
這一回,你應該看到第二條消息。
5.5 if和elif語句
我們還可以用elif來進一步擴展if語句,elif是else-if(否則-如果)的縮寫。例如,我們可以確認一個人的年齡是不是10、11或12(等等),然後根據答案不同做不同的事情。這些語句與if-then-else語句的不同在於,在同一個語句中可以有多於一個的elif。
在這個例子裡,第二行的
位置上的if語句檢查變數age的值是不是等於10。在後面
的print語句是在age等於10時運行的。然而,因為我們已經把age設置為等於12,電腦會跳到下一個在
的if語句並檢查age的值是不是等於11。它不等於,所以電腦就跳到了下一個在
的if語句來檢查age是不是等於12。是的,所以這次電腦會執行
的print命令。
當你在IDLE程式中輸入這些代碼時,它會自動地縮進,因此記得在輸入每個print語句之後按倒退鍵(backspace)或刪除(delete)鍵,這樣你的if、elif還有else語句會靠在最左邊。這和if語句除去提示符(>>>)後的縮進一樣。
5.6 組合條件
你可以用關鍵字and和or來把條件組合起來,這樣會產生更加簡短的代碼。下面是一個使用or的例子:
在這段代碼中,如果第一行上的任意一個條件為真的話(也就是age是10、11、12或13時),下一行中以print開始的代碼塊將會運行。
如果第一行的那些條件都不為真,Python會轉到最後那行代碼上執行,在螢幕上顯示“啥?”。
為了讓這個例子更簡潔一點,我們可以用關鍵字and,同時使用大於等於(>=)和小於等於(<=),如下:
這裡,像第一行代碼中if age >= 10 and age <=13:所表達的,如果age大於或等於10,並且小於或等於13,那麼在下一行以print開始的代碼塊就會運行。例如,如果age的值是12,那麼螢幕上就會列印出“13 + 49 + 84 + 155 + 97等於什麼?等於頭痛!”來,因為12比10大並且比13小。
5.7 沒有值的變數——None
就像我們可以給變數賦值為數位、字串和清單一樣,我們也可以給它賦值為什麼也沒有,或者說空的值。在Python裡,我們把空的值叫做None,它的含意就是沒有值。很重要的一點是要注意None和0這個值是不同的,因為它代表沒有值,而不是一個值為0的數字。我們如果給一個變數賦空值None的話,它的值就是什麼也沒有。下面是一個例子:
把空值None賦值給一個變數,相當於把它重置到最原始和空的狀態。把一個變數設置為None也是一種定義變數卻不用給它設置值的方法。如果你知道在後面的程式裡將會用到一個變數,但是你希望一開始就定義所有的變數,那麼你可能會這麼做。程式師經常在程式的開頭就定義變數,因為這樣就很容易看到一段代碼所用到的所有變數的名字。
你也可以在if語句中檢查None,就像下面這樣:
如果你只是想在變數還沒被計算出來前計算它的值,這種方法還是很有用的。
5.8 字串與數位之間的不同
“使用者輸入”就是人在鍵盤上輸入的內容,可能是個字元,按下的方向鍵或者回車鍵,或者其他任何東西。使用者輸入在Python裡作為一個字串,這也就是說當你在鍵盤上敲出數位10時,Python把數位10作為一個字串放到變數中,放在字串值中,而不是數字中。
數位10和字串 '10'有什麼區別呢?對我們來講看上去都一樣,只是其中一個被引號引了起來。但是對於電腦來講,他們卻大相徑庭。
例如,假設我們要在一個if語句中比較變數age的值和一個數字,就像這樣:
然後我們把變數age設置為數位10:
如你所見,print語句被執行了。
接下來,我們把age設置成字串'10'(帶引號),像這樣:
在這裡,代碼中的print語句沒有運行,因為Python沒有把引號中的數位(實際上是字串)當成一個數位。
幸運的是,Python中有函數可以魔術般地把字串變成數位,或者把數位變成字串。例如,你可以用int把字串'10'轉換成數位:
現在變數converted_age中的值就是數位10了。
要把數位轉換成字串,用str:
在這個例子裡,converted_age就是字串10而不是數位10了。
還記得上次當我們把變數設置為字串(age = '10')的時候, if age == 10那段代碼什麼也沒有列印出來嗎?如果我們先把變數轉換一下,那將會得到完全不同的結果:
但要注意:如果你想要轉換帶小數點的數位,那麼你會得到一條錯誤資訊,因為int函數需要的是一個整數。
Python用ValueError來告訴你,你所嘗試用的值是不恰當的。改正的方法是用float來代替int。float函數可以處理不是整數類型的數位。[譯者注:float意為“浮點數”,是電腦表示小數的一種方式。它不在本書講述的範圍裡。]
如果你要把沒有數位的字串轉成數位的話也會得到ValueError錯誤:
5.9 你學到了什麼
在這一章裡,你學到了如何用if語句來創建只有在某些特定條件為真時才執行的語句塊。你還看到了如何用elif來擴展if語句,讓不同的條件可以執行不同的語句段,還有如何用關鍵字else在這些條件都不為真時執行另一段代碼。你還學到了如何用關鍵字and和or來把條件組合起來,這樣就可以判斷數位是否在某個範圍裡。我們還學到了如何用int、str和float在字串與數位之間轉換。你還發現了什麼都沒有(None)在Python中是有意義的,可以用來把變數重置到它初始為空的狀態。
5.10 程式設計小測驗
用if語句和條件完成下面的測驗。答案可以在網站http://python-for-kids.com/ 上找到。
#1:你是富翁麼?
你認為下面的代碼會輸出什麼?試著先給出答案,不要在Shell程式中輸入下面的代碼。然後再驗證一下你的答案對不對。
#2:小蛋糕
創建一個if語句來檢查小蛋糕的數量(放在變數twinkies中)是否少於100或者大於500。如果這個條件為真的話你的程式就會列印出消息“不是太少就是太多。”。
#3:數字剛剛好
創建一個if語句檢查在變數money中包含的錢的數量是不是在100和500之間,還是在1 000和5 000之間。
#4:我打得過那些忍者
創建一個if語句,在變數ninjas[ninja,忍者]所包含的數位小於50時列印“太多了”,在數位小於30時列印“有點難,不過我能應付”,在數字小於10時列印“我打得過那些忍者!”。用這個情況來試試你的代碼:






































0 留言:
發佈留言