前面我們已經學習了輸入和類型轉換。現在我們可以使用Python解決一些實際的問題了。我們再引入一個數學的問題,2 + 3和2 × 3的結果誰大誰小?這個問題使用Python如何解決呢?這次的課我們将要講一下比較運算、邏輯運算和布爾值。
一、布爾值
1.1 什麼是布爾值
布爾值(bool)由真(True)和假(False)這兩個值組成,用于邏輯判斷。布爾值的True對應數字1,False對應數字0。
1.2 布爾值與其他類型的轉換
布爾值True轉換為整數為1、轉換為浮點數為1.0
布爾值False轉換成整數為0、轉換為浮點數為0.0
print(int(True)) # 1
print(float(True)) # 1.0
print(int(False)) # 0
print(float(False)) # 0.0
整數0轉換為布爾值為False,其他整數轉換為布爾型都為True
浮點數0.0轉換為布爾值為False,其他浮點數轉換為布爾型都為True
空字元串轉換為布爾值為False,其他字元串轉換為布爾值都為True
print(bool(0)) # False
print(bool(0.0)) # False
print(bool(12)) # True
print(bool(0.1)) # True
print(bool('')) # False
print(bool('hello')) # True
二、比較運算符
比較運算符一共有六個:
運算符 | 作用 |
== | 判斷兩個值是否相等 |
!= | 判斷兩個值是否不相等 |
> | 判斷左邊是否大于右邊 |
< | 判斷左邊是否小于右邊 |
>= | 判斷左邊是否大于或等于右邊 |
<= | 判斷左邊是否小于或等于右邊 |
注意:等于的比較運算符是==,應當與指派運算符=區分開,不能寫錯。
比較運算符的結果是布爾值,為True或者False。
例:
3 == 3.0 | True |
5 != 5 | False |
6 > 4 | True |
6 < 4 | False |
7 >= 6 | True |
6 <= 6 | True |
2.1 數字大小的比較
不管是整數還是浮點數,大小的比較與數學上數字的大小完全一緻。
print(4.0 == 4) # True
print(2 > -1) # True
print(10 < -10) # False
2.2 字元串大小的比較
字元串的大小比較的原理來自于Unicode碼(具體字元編碼的知識在後面的進階課程中會涉及)。在現階段我們隻需要掌握如下規律:
數字 < 大寫字母 < 小寫字母 < 漢字
同樣是大寫字母(小寫字母)的,按照英文字母表的順序,前面 < 後面。
字元串大小比較按照逐一比較的原則來比較大小。第一個字元不一樣,即直接比較出大小,無論後面還有什麼字元;第一個字元一樣,則比較第二個字元,第二個字元不一樣,即比較出大小;以此類推。
我們來看一下具體示例:
'123' | < | 'abc' | 數字 < 字母 |
'ABC' | < | 'abc' | 小寫字母 < 大寫字母 |
'ABC' | < | 'BCD' | 字母A在字母B前面 |
'ABC' | < | 'ACD' | 第一個字母相同,比較第二個字母 |
'12' | > | '111' | 第一個字元都是1,第二個字元2>1 |
'AB' | > | 'A' | 第一個字元相同,右邊沒有第二個字元,左邊大 |
三、邏輯運算符
邏輯運算符一共有三個,與(and)、或(or)、非(not)。
3.1 not運算符
not運算符是取反,not True結果為False、not False結果為True
大家可以思考一下,以下代碼的運算結果是什麼?
print(not 2)
print(not '')
前面講過,非0的數字都是True,是以not 2的結果是False;空字元串是False,是以not ''的結果是True。
3.2 or運算符
or是邏輯或,如果兩邊都是False,結果為False;隻要有一個為True,結果就為True。
print(True or True) # True
print(True or False) # True
print(False or True) # True
print(False or False) # False
如果兩邊的值都是布爾值,or運算符非常好了解。但如果兩邊出現數字,就要說一下Python在處理or運算符的原理了。Python中采用一種非常“懶惰”的方式計算or運算符,如果左邊的值為True,那運算結果一定是True,Python就不會看右邊的值了;如果左邊的值為False,那就要看右邊的值是True還是False。說起來有點抽象,我們具體看一下下面幾個運算式的結果。
print(2 or 4) # 2
print(3 or 0) # 3
print(0 or 6) # 6
print(0 or 0) # 0
我們看第一行和第二行,左邊的數字為非0,轉換成布爾型是True,是以不再看右邊的值,是以結果就等于左邊的值;再看第三行和第四行,左邊的數字為0,轉換成布爾型是False,是以看右邊的值,右邊的值為多少最後的結果就是多少。
3.3 and運算符
and是邏輯與,如果兩邊都是True,結果為True;隻要有一個為False,結果就為False。
print(True and True) # True
print(True and False) # False
print(False and True) # False
print(False and False) # False
如果兩邊的值都是布爾值,and運算符非常好了解。如果兩邊出現數字,又要提到Python在處理and運算符的原理了。Python中同樣使用“懶惰”的方式處理and運算符。如果左邊的值為False,那結果一定為False,Python就不會看右邊的值了;如果左邊的值為True,那就要看右邊的值是True還是False。同樣我們看下面幾個運算式的結果。
print(5 and 8) # 8
print(5 and 0) # 0
print(0 and 7) # 0
print(0 and 0) # 0
先看第一行和第二行,左邊的值為非0,轉換成布爾型是True,是以需要看右邊的值,右邊的值是什麼結果就是什麼;再看第三行和第四行,左邊的值為0,轉換成布爾型為False,是以不再需要看右邊的值,左邊的值是多少結果就是多少。
3.4 邏輯運算符的優先級
邏輯運算符中,優先級最高的是not,其次是and,最後再算or。
以True or not True and False為例:
① True or not True and False
② True or False and False
③ True or False
④ True
四、運算符的優先級
我們到目前為止,學了算術運算符、比較運算符和邏輯運算符。我們最後整體看一下所有運算符的優先級關系。
整體優先級為:算術運算符 > 比較運算符 > 邏輯運算符
運算符 | 描述 |
** | 算數運算符——幂運算 |
*、/、%、// | 算數運算符——乘、除、取模、整除 |
+、- | 算數運算符——加、減 |
<、<=、>、>=、==、!= | 關系運算符 |
not | 邏輯運算符——非運算 |
and | 邏輯運算符——與運算 |
or | 邏輯運算符——或運算 |
五、課後思考題
1、假設a=20,b=3,那麼a or b的結果是( )
A. 20 B. False C. True D. 3
2、已知x=5,y=6,則表達式not(x!=y)的值為( )
A. True B. False C. 5 D. 6
3、在下面的運算符中,按照運算優先級,哪一個是最進階?( )
A. ** B. * C. + D. //
4、假設a=2,b=1,c= a and b-1,那麼c的值是( )
A. 3 B. 1 C. 2 D. 0
5、print(2*3 > 4*2 or 121>12 and 7%3 == 4%3)的結果是( )
A. False B. True C. 3 D. 4
6、程式設計題
小明帶了100元錢去文具店買本子,已知每本本子的單價是3.3元。輸入購買的本子的數量,計算小明身上的錢夠不夠。如果夠,輸出True;如果不夠,輸出False
輸入:
一行輸入,輸入本子的數量
輸出:
True或者False
六、上節課思考題答案
1、10
2、參考代碼:
a = input("請輸入長:")
b = input("請輸入寬:")
a = float(a)
b = float(b)
s = a * b
print(s)