name =input('What is your name? ')if name.endswith('Gumby'):print('Hello, Mr. Gumby')else:print('Hello, Stranger')
在這裏,如果沒有執行第一個代碼塊(因爲條件爲假),將進入第二個代碼塊。這個示例表明,Python代碼很容易理解,不是嗎?
如果從 if 開始將代碼大聲朗讀出來,聽起來將像普通句子一樣(也可能不那麼普通)。
還有一個與 if 語句很像的“親戚”,它就是條件表達式——C語言中三目運算符的Python版本。下面的表達式使用 if 和 else 確定其值:
status ="friend"if name.endswith("Gumby")else"stranger"print(status)
如果條件(緊跟在 if 後面)爲真,表達式的結果爲提供的第一個值(這裏爲 "friend" ),否則爲第二個值(這裏爲 "stranger" )。
4. elif 子句
要檢查多個條件,可使用 elif 。 elif 是 else if 的縮寫,由一個 if 子句和一個 else 子句組合而成,也就是包含條件的 else
子句。
num =int(input('Enter a number: '))if num >0:print('The number is positive')elif num <0:print('The number is negative')else:print('The number is zero')
5. 代碼嵌套
下面穿插點額外的內容。你可將 if 語句放在其他 if 語句塊中,如下所示:
name =input('What is your name? ')if name.endswith('Gumby'):if name.startswith('Mr.'):print('Hello, Mr. Gumby')elif name.startswith('Mrs.'):print('Hello, Mrs. Gumby')else:print('Hello, Gumby')else:print('Hello, stranger')
這就是你需要知道的有關 if 語句的全部知識。下面來說說條件本身,因爲它們是有條件執行中最有趣的部分。
6.1 比較運算符
從理論上說,可使用 < 和 <= 等運算符比較任意兩個對象 x 和 y 的相對大小,並獲得一個真值,但這種比較僅在 x 和 y 的類型
相同或相近時(如兩個整數或一個整數和一個浮點數)纔有意義。將整數與字符串相加毫無意義,檢查一個整數是否小於一個字符串也是
一樣。奇怪的是,在Python 3之前,竟然可以這樣做。不過即便你使用的是較舊的Python版本,也應對這類比較敬而遠之,因爲結果是
不確定的,每次執行程序時都可能不同。在Python 3中,已經不允許這樣比較不兼容的類型了。
與賦值一樣,Python也支持鏈式比較:可同時使用多個比較運算符,如 0 < age < 100 。有些比較運算符需要特別注意,如下:
1. 相等運算符: 要確定兩個對象是否相等,可使用比較運算符,用兩個等號( == )表示。
>>>"foo"=="foo"True>>>"foo"=="bar"False#兩個等號?爲何不像數學中那樣使用一個等號呢?相信你很聰明,自己就能夠明白其中的原因,但這裏還是試試一個等號吧。>>>"foo"="foo"
SyntaxError: can't assign to literal
#一個等號是賦值運算符,用於修改值,而進行比較時你可不想這樣做。
2. is - 相同運算符:
#這個運算符很有趣,其作用看似與 == 一樣,但實際上並非如此。>>> x = y =[1,2,3]>>> z =[1,2,3]>>> x == y
True>>> x == z
True>>> x is y
True>>> x is z
False'''
在前幾個示例中,看不出什麼問題,但最後一個示例的結果很奇怪: x 和 z 相等,但 x is z 的
結果卻爲 False 。爲何會這樣呢?因爲 is 檢查兩個對象是否相同(而不是相等)。變量 x 和 y 指向同
一個列表,而 z 指向另一個列表(其中包含的值以及這些值的排列順序都與前一個列表相同)。這
兩個列表雖然相等,但並非同一個對象。
'''#這好像不可理喻?請看下面的示例:>>> x =[1,2,3]>>> y =[2,4]>>> x isnot y
True>>>del x[2]>>> y[1]=1>>> y.reverse()'''
在這個示例中,我首先創建了兩個不同的列表 x 和 y 。如你所見, x is not y (與 x is y 相反)
的結果爲 True ,這一點你早已知道。接下來,我稍微修改了這兩個列表,現在它們雖然相等,但
依然是兩個不同的列表。
'''>>> x == y
True>>> x is y
False'''
顯然,這兩個列表相等但不相同。
總之, == 用來檢查兩個對象是否相等,而 is 用來檢查兩個對象是否相同(是同一個對象)。
不要將 is 用於數和字符串等不可變的基本值。鑑於Python在內部處理這些對象的方式,這樣做的結果是不可預測的。
'''
3. in - 成員資格運算符:
#與其他比較運算符一樣,它也可用於條件表達式中。
name =input('What is your name?')if's'in name:print('Your name contains the letter "s".')else:print('Your name does not contain the letter "s".')
number =int(input('Enter a number between 1 and 10: '))if number <=10:if number >=1:print('Great!')else:print('Wrong!')else:print('Wrong!')#這可行,但有點笨拙,因爲你輸入了 print('Wrong!') 兩次。重複勞動可不是好事,那麼該如何辦呢?很簡單。
number =int(input('Enter a number between 1 and 10: '))if number <=10and number >=1:print('Great!')else:print('Wrong!')'''
運算符 and 是一個布爾運算符。它接受兩個真值,並在這兩個值都爲真時返回真,否則返回
假。還有另外兩個布爾運算符: or 和 not 。通過使用這三個運算符,能以任何方式組合真值。
'''if((cash > price)or customer_has_good_credit)andnot out_of_stock:
give_goods()
7. 斷言
#if 語句有一個很有用的“親戚”,其工作原理類似於下面的僞代碼:ifnot condition:
crash program
'''
問題是,爲何要編寫類似於這樣的代碼呢?因爲讓程序在錯誤條件出現時立即崩潰勝過以後
再崩潰。基本上,你可要求某些條件得到滿足(如覈實函數參數滿足要求或爲初始測試和調試提
供幫助),爲此可在語句中使用關鍵字 assert 。
'''>>> age =10>>>assert0< age <100>>> age =-1>>>assert0< age <100
Traceback (most recent call last):
File "<stdin>", line 1,in ?
AssertionError
'''
如果知道必須滿足特定條件,程序才能正確地運行,可在程序中添加 assert 語句充當檢查點,
這很有幫助。
還可在條件後面添加一個字符串,對斷言做出說明。
'''>>> age =-1>>>assert0< age <100,'The age must be realistic'
Traceback (most recent call last):
File "<stdin>", line 1,in ?
AssertionError: The age must be realistic