邏輯運算符是對真和假兩種布爾值進行運算(操作 bool 類型的變量、常量或表達式),邏輯運算的返回值也是 bool 類型值。
Python 中的邏輯運算符主要包括 and(邏輯與)、or(邏輯或)以及 not(邏輯非),它們的具體用法和功能如表 1 所示。
| 邏輯運算符 | 含義 | 基本格式 | 功能 |
|---|---|---|---|
| and | 邏輯與(簡稱“與”) | a and b | 有 2 個操作數 a 和 b,只有它們都是 True 時,才返回 True,否則返回 False。 |
| or | 邏輯或(簡稱“或”) | a or b | 有 2 個操作數 a 和 b ,只有它們都是 False 時,才返回 False,否則返回 True。 |
| not | 邏輯非(簡稱“非”) | not a | 只需要 1 個操作數 a,如果 a 的值為 True,則返回 False;反之,如果 a 的值為 False,則返回 True。 |
下面代碼示范了與、或、非這三個邏輯運算符的使用:
- # 直接對False求非運算,將返回True
- print(not False)
- # 5>3返回True,20.0大於10,因此結果返回True
- print(5 > 3 and 20.0 > 10)
- # 4>=5返回False,"c">"a"返回True。求或后返回True
- print(4 >= 5 or "c" > "a")
有些時候,程序需要使用多個邏輯運算符來組合復雜的邏輯。例如,假設想表達如下邏輯:需要購買一套必須以“Python”結尾的教程,且教程價格小於 50 元或該教程是基於“正式版”的。假如使用如下程序:
- bookName = "C語言中文網Python"
- price = 99
- version = "正式版"
- if bookName.endswith('Python') and price < 50 or version == "正式版" :
- print("打算購買這套Python教程")
- else:
- print("不購買!")
編譯、運行上面程序,可以看到程序輸出“打算購買這套Python教程”。那么上面程序是否有問題呢?
其實問題是存在的,這是因為程序會先計算 bookName.endswith('Python') and price < 50,即使該邏輯表達式中的兩個條件都是 False,但只要后面的 version==“正式版” 返回 True,整個表達式就會返回 True,從而導致程序依然會輸出“打算購買這套Python教程”。因此,即使把上面程序中的 bookName 改為不以“Python”結尾,程序也依然會輸出“打算購買這套Python教程”。
運算結果顯然與邏輯需求並不一致,邏輯需求是:需要購買一套名以“Python” 結尾的教程。此時應該使用圓括號來保證程序先對 price < 50 || version =="正式版" 求值,然后再與 bookName.endswith('Python') 的結果求與。
因此,應該把程序改為如下形式:
- bookName = "C語言中文網Python"
- price = 99
- version = "正式版"
- if bookName.endswith('Python') and (price < 50 or version == "正式版") :
- print("打算購買這套Python教程")
- else:
- print("不購買!")
從上面代碼可以看出,對於組合邏輯來說,使用圓括號保證運算順序非常重要。
需要說明的是,即使不是為了保證邏輯運算的順序,且有括號和沒括號的輸出結果是一樣的,本教程也依然建議使用圓括號來提高程序的可讀性。
