天天看點

Python進階之路 3.4.4 比較運算符

3.4.4 比較運算符

盡管if語句本身的知識到現在為止已經全部講完了,不過我們的學習遠沒有結束。前面給出的if語句的條件都非常簡單,但在實際應用中,if語句的條件可能非常複雜,這就需要使用到節要介紹的比較運算符。

現在先來看一下表3-1列出的Python語言中的比較運算符

表 3-1 Python語言中的比較運算符

邏輯表達式 描述
x == y x等于y
x < y x小于y
x > y x大于y
x >= y x大于或等于y
x <= y x小于或等于y
x != y x不等于y
x is y x和y是同一個對象
x is not y x和y不是同一個對象
x in y x是y容器的成員,例如,y是清單[1,2,3,4],那麼1是y的成員,而5不是y的成員
x not in y x不是y容器成員

在表 3-1 描述的比較運算符中,涉及對象和容器的概念,目前還沒講這些深入的技術,在本節隻需了解Python語言可以通過比較運算符操作對象和容器即可。在後面介紹對象和容器的章節,會詳細介紹如何利用相關比較運算符操作對象和容器。

在比較運算中,最常用的就是判斷兩個值是否相等。例如,a大于b,a等于b,這些運算符包括"==","<",">",">=","<=“和”!="。

如果比較兩個值是否相等,需要使用"=="運算符,也就是兩個等号。

>>> "hello" == "hello"
True
>>> "Hello" == "hello"
False
>>> 30 == 10
False
           

要注意,如果比較兩個字元串是否相等,會比較兩個字元串中對應的每一個字母,是以"Hello"和"hello"并不相等,也就是說比較運算符是對大小寫敏感的。

在使用"=="運算符時一定要注意,不要寫成一個等号(=),否則就成指派運算符了。對于指派運算符來說,等号(=)左側必須是一個變量,否則會抛出異常。

對于字元串、數值等類型的值,也可以使用大于(>)、小于(<)等運算符比較它們的大小。

>>> "hello" > "Hello"
True
>>> 20 > 30
False
>>> s = 40
>>> s <= 30
False
>>> "hello" != "Hello"
True
           

Python語言在比較字元串時,會按字母ASCII順序進行比較,例如,比較"hello"和"Hello"的大小。首先會比較"h"和"H"的大小,很明顯’h’的ASCII大于’H’的ASCII,是以後面的都不需要比較了,是以,“hello” > "Hello"的結果是True。

除了比較大小的幾個運算符外,還有用來确定兩個對象是否相等的運算符,以及判斷某個值是否屬于一個容器的運算符,盡管現在還沒有講到容器和對象。但這裡不妨做一個試驗,來看看這些運算符如何使用,以便以後學習對象和容器時,更容易掌握這些運算符。

用于判斷兩個對象是否相等的運算符是is和is not,這兩個運算符看起來和等于運算符(==)差不多,不過用起來卻大有玄機。

>>> x = y = [1,2,3]
>>> z = [1,2,3]
>>> x == y
True
>>> x == z
True
>>> x is y
True
>>> x is z
False
>>> x is not z
True
           

在上面的代碼中,使用 = =和is比較x和y時結果完全一樣,不過在比較x和z時,就會展現出差異。x = = z的結果是True,而x is z的結果卻是False。出現這樣的結果,原因是==運算符比較的是對象的值,x和z的值都是一個清單(也可以将清單看做一個對象),并且清單中的元素個數和值完全一樣,是以x = = z的結果是True。但is運算符用于判斷對象的同一性,也就是說,不僅對象的值要完全一樣,而且對象本身還要是同一個對象,很明顯,x和y是同一個對象,因為在指派時,先将一個清單指派給y,然後在将y的值賦給x,是以x和y指向了同一個對象,而z另外指派了一個清單,是以z和x、y盡管值相同,但并不是指向的同一個對象,是以,x is z的結果就是False。

判斷某個值是否屬于一個容器,要使用in和not in運算符。下面的代碼首先定義一個清單變量x,然後判斷變量y和一些值是否屬于x。

>>> x = [1,2,3,4,5]	#定義一個清單變量
>>> y = 3
>>> 1 in x
True
>>> y in x
True
>>> 20 in x
False
>>> 20 not in x
True
           

in和not in運算符也可以用于判斷一個字元串是否包含另外一個字元串,也就是說,可以将字元串看作字元或子字元串的容器。

>>> s = "hello world"
>>> 'e' in s
True
>>> "e" in s
True
>>> "x" in s
False
>>> "x" not in s
True
>>> "world" in s
True
           

如果遇到需要将多個邏輯表達式組合在一起的情況,需要用到邏輯與(and)、邏輯或(or)和邏輯非(not)。邏輯與的運算規則是隻有x and y中的x和y都為True時,運算結果才是True,否則為False。邏輯或的運算規則是隻有x or y中的x和y都為False時,運算結果才是False,否則都為True。邏輯非的運算規則是not x中,x為True,運算結果為False,x為False,運算結果為True。

>>> 20 < 30 and 40 < 50
True
>>> 20 > 40 or 20 < 40
True
>>> not 20 > 40
True
           

[例 3.5] 本例示範了比較運算符的基本用法。

print(20 == 30)             #判斷20和30是否相等,運作結果:False
x = 20
y = 40
print(x < y)                #判斷x是否小于y,運作結果:True

if x > y:                   #條件不滿足
    print("x > y")
else:                       #條件滿足
    print("x < y")

s1 = "hello"
s2 = "Hello"

if s1 >= s2 and x > y:      #條件不滿足
    print("滿足條件")
elif not s1 < s2:           #條件滿足
    print("基本滿足條件")
else:
    print("不滿足條件")       #條件不滿足