天天看點

青少年Python程式設計系列7:Python的比較運算、邏輯運算和布爾值

作者:鳳城老人

前面我們已經學習了輸入和類型轉換。現在我們可以使用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)