零基礎(chǔ)Python完全自學(xué)教程8:Python中常用的運(yùn)算符
歡迎你來(lái)到站長(zhǎng)學(xué)堂,學(xué)習(xí)站長(zhǎng)在線出品的在線課程《零基礎(chǔ)Python完全自學(xué)教程》今日分享的是第8課《Python中常用的運(yùn)算符》。本節(jié)課主要內(nèi)容有:算術(shù)運(yùn)算符、賦值運(yùn)算符、比較(關(guān)系)運(yùn)算符、邏輯運(yùn)算符和位運(yùn)算符。
永久美國(guó)免備案虛擬主機(jī)1元1天,15元1月,100元1年,1000元永久
站長(zhǎng)在線旗下答案網(wǎng)站,全站所有題目,免費(fèi)查看答案和答案解析
歡迎你來(lái)到站長(zhǎng)學(xué)堂,學(xué)習(xí)站長(zhǎng)在線出品的在線課程《零基礎(chǔ)python完全自學(xué)教程》今日分享的是第8課《Python中常用的運(yùn)算符》。本節(jié)課主要內(nèi)容有:算術(shù)運(yùn)算符、賦值運(yùn)算符、比較(關(guān)系)運(yùn)算符、邏輯運(yùn)算符和位運(yùn)算符。
運(yùn)算符就是一些特殊的符號(hào),用于數(shù)學(xué)計(jì)算、比較大小,判斷邏輯等。Python的運(yùn)費(fèi)符主要包括算術(shù)運(yùn)算符、賦值運(yùn)算符、比較(關(guān)系)運(yùn)算符、邏輯運(yùn)算符和位運(yùn)算符。使用運(yùn)算符將不同類型的數(shù)據(jù)按照一定的規(guī)則鏈接起來(lái)的式子,稱為表達(dá)式。
使用算術(shù)運(yùn)算符連接起來(lái)的式子,稱為算術(shù)表達(dá)式;使用邏輯運(yùn)算符連接起來(lái)的式子,稱為邏輯表達(dá)式。下面開(kāi)始對(duì)Python中常用的的運(yùn)算符進(jìn)行詳細(xì)介紹。
8.1、Python中的算術(shù)運(yùn)算符
算術(shù)運(yùn)算符也即數(shù)學(xué)運(yùn)算符,用來(lái)對(duì)數(shù)字進(jìn)行數(shù)學(xué)運(yùn)算,比如加減乘除。下表列出了 Python 支持所有基本算術(shù)運(yùn)算符。
在python算術(shù)運(yùn)算中,和數(shù)學(xué)計(jì)算一樣:
1、0是不能作為除數(shù)的。否則就會(huì)出錯(cuò)。
2、加法運(yùn)算符很簡(jiǎn)單,和數(shù)學(xué)中的規(guī)則一樣。當(dāng)+用于字符串時(shí),它還有拼接字符串(將兩個(gè)字符串連接為一個(gè))的作用。
8.2、Python中的賦值運(yùn)算符
賦值運(yùn)算符主要用來(lái)變量等賦值。賦值運(yùn)算符用來(lái)把右側(cè)的值傳遞給左側(cè)的變量(或者常量);可以直接將右側(cè)的值交給左側(cè)的變量,也可以進(jìn)行某些運(yùn)算后再交給左側(cè)的變量,比如加減乘除、函數(shù)調(diào)用、邏輯運(yùn)算等。
圖8.2為常用的賦值運(yùn)算符
站長(zhǎng)在線提醒大家,很多程序員常常把“=”和“==”搞混淆了。很多編程語(yǔ)言常常用錯(cuò)的兩個(gè)符號(hào)。
8.3、Python中的比較運(yùn)算符(關(guān)系運(yùn)算符)
比較運(yùn)算符,也稱關(guān)系運(yùn)算符,用于對(duì)常量、變量或表達(dá)式的結(jié)果進(jìn)行大小比較。如果這種比較是成立的,則返回 True(真),反之則返回 False(假)。
Python 比較運(yùn)算符匯總
圖8.3Python 比較運(yùn)算符匯總
Python 比較運(yùn)算符的使用舉例:
print("89是否大于100:", 89 > 100)
print("24*5是否大于等于76:", 24*5 >= 76)
print("86.5是否等于86.5:", 86.5 == 86.5)
print("34是否等于34.0:", 34 == 34.0)
print("False是否小于True:", False < True)
print("True是否等于True:", True < True)
運(yùn)行結(jié)果:
89是否大于100: False
24*5是否大于等于76: True
86.5是否等于86.5: True
34是否等于34.0: True
False是否小于True: True
True是否等于True: False
>>>
8.4、Python中的邏輯運(yùn)算符
高中數(shù)學(xué)中我們就學(xué)過(guò)邏輯運(yùn)算,例如 p 為真命題,q 為假命題,那么“p且q”為假,“p或q”為真,“非q”為真。Python 的邏輯運(yùn)算,主要包括and(邏輯與)、or(邏輯或)、not(邏輯非)。
本教程參考很多的書(shū)籍、在線課程,最終采用C語(yǔ)言中文網(wǎng)的說(shuō)法:
Python 邏輯運(yùn)算符用于操作 bool 類型的表達(dá)式,執(zhí)行結(jié)果也是 bool 類型,這兩點(diǎn)其實(shí)都是錯(cuò)誤的!
Python 邏輯運(yùn)算符可以用來(lái)操作任何類型的表達(dá)式,不管表達(dá)式是不是 bool 類型;同時(shí),邏輯運(yùn)算的結(jié)果也不一定是 bool 類型,它也可以是任意類型。請(qǐng)看下面的例子:
print(100 and 200)
print(45 and 0)
print("" or "https://www.olzz.com/xuetang/python/")
print(18.5 or "http://003188.cn/xuetang/python/")
運(yùn)行結(jié)果:
200
0
http://003188.cn/xuetang/python/
18.5
>>>
你看,本例中 and 和 or 運(yùn)算符操作的都不是 bool 類型表達(dá)式,操作的結(jié)果也不是 bool 值。
邏輯運(yùn)算符的本質(zhì)
在 Python 中,and 和 or 不一定會(huì)計(jì)算右邊表達(dá)式的值,有時(shí)候只計(jì)算左邊表達(dá)式的值就能得到最終結(jié)果。
另外,and 和 or 運(yùn)算符會(huì)將其中一個(gè)表達(dá)式的值作為最終結(jié)果,而不是將 True 或者 False 作為最終結(jié)果。
以上兩點(diǎn)極其重要,了解這兩點(diǎn)不會(huì)讓你在使用邏輯運(yùn)算的過(guò)程中產(chǎn)生疑惑。
對(duì)于 and 運(yùn)算符,兩邊的值都為真時(shí)最終結(jié)果才為真,但是只要其中有一個(gè)值為假,那么最終結(jié)果就是假,所以 Python 按照下面的規(guī)則執(zhí)行 and 運(yùn)算:
如果左邊表達(dá)式的值為假,那么就不用計(jì)算右邊表達(dá)式的值了,因?yàn)椴还苡疫叡磉_(dá)式的值是什么,都不會(huì)影響最終結(jié)果,最終結(jié)果都是假,此時(shí) and 會(huì)把左邊表達(dá)式的值作為最終結(jié)果。
如果左邊表達(dá)式的值為真,那么最終值是不能確定的,and 會(huì)繼續(xù)計(jì)算右邊表達(dá)式的值,并將右邊表達(dá)式的值作為最終結(jié)果。
對(duì)于 or 運(yùn)算符,情況是類似的,兩邊的值都為假時(shí)最終結(jié)果才為假,只要其中有一個(gè)值為真,那么最終結(jié)果就是真,所以 Python 按照下面的規(guī)則執(zhí)行 or 運(yùn)算:
如果左邊表達(dá)式的值為真,那么就不用計(jì)算右邊表達(dá)式的值了,因?yàn)椴还苡疫叡磉_(dá)式的值是什么,都不會(huì)影響最終結(jié)果,最終結(jié)果都是真,此時(shí) or 會(huì)把左邊表達(dá)式的值作為最終結(jié)果。
如果左邊表達(dá)式的值為假,那么最終值是不能確定的,or 會(huì)繼續(xù)計(jì)算右邊表達(dá)式的值,并將右邊表達(dá)式的值作為最終結(jié)果。
8.5、Python中的位運(yùn)算符
為運(yùn)算符是把數(shù)字看作二進(jìn)制數(shù)來(lái)進(jìn)行計(jì)算的,因此需要將要執(zhí)行運(yùn)算的數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制,然后才能運(yùn)算。Python中的位運(yùn)算符有按位與(&)、按位或(|)、按位異或(^)、按位取反(~)、左位移(<<)和右移位(>>)運(yùn)算符。
8.5.1、“按位與”運(yùn)算(&)
按位與運(yùn)算的運(yùn)算符為“&”,它的運(yùn)算法則是,兩個(gè)操作數(shù)的二進(jìn)制表示,只有對(duì)應(yīng)位都為1,結(jié)果才為1,否則為0。如果兩個(gè)操作數(shù)的精度不同,則結(jié)果的精度與精度高的操作數(shù)相同??聪路?span >12&8的運(yùn)算過(guò)程。
#12&8的運(yùn)算過(guò)程
0000 0000 0000 1100
& 0000 0000 0000 1000
0000 0000 0000 1000
8.5.2、“按位或”運(yùn)算(|)
“按位或”運(yùn)算的運(yùn)算符為(|),它的運(yùn)算法則是,兩個(gè)操作數(shù)的二進(jìn)制表示,只有對(duì)應(yīng)位都為0,結(jié)果才為0,否則為1。如果兩個(gè)操作數(shù)的精度不同,則結(jié)果的精度與精度高的操作數(shù)相同。看下方4|8的運(yùn)算過(guò)程。
#4|8的運(yùn)算過(guò)程
0000 0000 0000 0100
| 0000 0000 0000 1000
0000 0000 0000 1100
8.5.3、“按位異或”運(yùn)算(^)
“按位異或”運(yùn)算的運(yùn)算符為(^),它的運(yùn)算法則是,兩個(gè)操作數(shù)的二進(jìn)制表示相同(同時(shí)為0或同時(shí)為1),結(jié)果才為0,否則為1。如果兩個(gè)操作數(shù)的精度不同,則結(jié)果的精度與精度高的操作數(shù)相同??聪路?|8的運(yùn)算過(guò)程??聪路?1^22的運(yùn)算過(guò)程。
#31^22的運(yùn)算過(guò)程
0000 0000 0001 1111
^ 0000 0000 0001 0110
0000 0000 0000 1001
8.5.4、“按位取反”運(yùn)算(~)
“按位取反”運(yùn)算也稱“按位非”運(yùn)算,運(yùn)算符為“~”。“按位取反”運(yùn)算就是將操作位數(shù)對(duì)應(yīng)二進(jìn)制中的1改為0,0改為1,如下所示:
#~123的運(yùn)算過(guò)程
~ 0000 0000 0111 1011
1111 1111 1000 0100
在Python中,使用函數(shù)print()函數(shù)輸出8.5.1~8.5.4的運(yùn)算結(jié)果,代碼如下:
print("12&8 = "+str(12&8)) #按位與計(jì)算整數(shù)的結(jié)果
print("4|8 = "+str(4|8)) #按位或計(jì)算整數(shù)的結(jié)果
print("31^22 = "+str(31^22)) #按位異或計(jì)算整數(shù)的結(jié)果
print("~123 = "+str(~123)) #按位取反計(jì)算整數(shù)的結(jié)果
運(yùn)算結(jié)果如下:
12&8 = 8
4|8 = 12
31^22 = 9
~123 = -124
>>>
8.5.5、“左移位”運(yùn)算(<<)
“左移位”運(yùn)算的運(yùn)算符為“<<”,它的運(yùn)算法則是將第一個(gè)二進(jìn)制操作數(shù)向左移動(dòng)指定的位數(shù),左邊(高位端)溢出的被丟棄,右邊(低位端)的空位用0補(bǔ)充。左移位運(yùn)算相對(duì)于乘以2的N次方。
列:int類型的數(shù)據(jù)48對(duì)應(yīng)的二進(jìn)制數(shù)位00110000,將左移一位,根據(jù)左移位運(yùn)算符的運(yùn)算規(guī)則得出(00110000<<1)=01100000,所以轉(zhuǎn)換為十進(jìn)制數(shù)就是96(48*2);將其左移2位,根據(jù)左移位運(yùn)算符的運(yùn)算規(guī)則可以得出(00110000<<2)=11000000,所以轉(zhuǎn)換為十進(jìn)制數(shù)就是192,(48*2的2次方),執(zhí)行過(guò)程如下:
#左移位運(yùn)算過(guò)程
十進(jìn)制:48 00110000(左移1位)
十進(jìn)制:96 (0被丟棄)01100000(左移后補(bǔ)0)(左移2位)
十進(jìn)制:192 (0被丟棄)11000000(左移后補(bǔ)0)
8.5.6、“右移位”運(yùn)算(>>)
“右移位”運(yùn)算的運(yùn)算符為“>>”,它的運(yùn)算法則是將第一個(gè)二進(jìn)制操作數(shù)向右移動(dòng)指定的位數(shù),右邊(低位端)溢出的位被丟棄,而當(dāng)填充左邊(高位端)的空位是,如果高位端是0(正數(shù)),則左側(cè)空位填入0;如果最高位是1(負(fù)數(shù)),則左側(cè)空位填入1。右移位運(yùn)算相對(duì)于除以2的N次方。
正數(shù)的右移運(yùn)算過(guò)程:
#正數(shù)48右移1位的運(yùn)算過(guò)程
十進(jìn)制:48 00110000
右移1位
十進(jìn)制:24 00011000
左側(cè)右移后補(bǔ)0 右側(cè)0被舍棄
負(fù)數(shù)的右移位的運(yùn)算過(guò)程:
#負(fù)數(shù)-80的右移2位的運(yùn)算過(guò)程:
十進(jìn)制:-80 10110000
右移2位
十進(jìn)制:-20 11101100
左側(cè)右移后補(bǔ)1 右側(cè)0倍舍棄
站長(zhǎng)在線微信提示:由于位移運(yùn)算的速度很快,因此當(dāng)程序中遇到表達(dá)式乘以或者除以2的N次方的情況下,一般采用位移運(yùn)算來(lái)代替。
例如:使用位移運(yùn)算符對(duì)密碼進(jìn)行加密解密。
在idle中創(chuàng)建一個(gè)名為jiamijiemi.py的文件,然后再該文件中定義兩個(gè)變量:一個(gè)用于保存密碼,另一個(gè)用于保存加密參數(shù)。然后應(yīng)用左移位運(yùn)算符實(shí)現(xiàn)加密,并輸出結(jié)果,最后應(yīng)用右移位運(yùn)算符實(shí)現(xiàn)解密,輸出結(jié)果代碼如下:
password = 87654321 # 密碼
key = 7 # 加密參數(shù)
print("\n原密碼:",password) # 輸出原密碼
password = password << key # 將原密碼左移,生成新的數(shù)字
print("\n加密后:",password) # 輸出加密后的密碼
password = password >> key # 將新密碼右移,還原密碼
print("\n解密后:",password) # 輸出解密后的密碼
運(yùn)行結(jié)果:
原密碼: 87654321
加密后: 11219753088
解密后: 87654321
>>>
以上就是對(duì)密碼進(jìn)行加密和解密的結(jié)果。
下節(jié)預(yù)告:零基礎(chǔ)Python完全自學(xué)教程9:Python中運(yùn)算符的優(yōu)先級(jí)和條件表達(dá)式
本課內(nèi)容比較多,且無(wú)課后習(xí)題。
上期答案:7.1、ABCD 7.2、BCD
文末福利:
1、關(guān)注站長(zhǎng)在線官方公眾號(hào)【站長(zhǎng)在線】微信號(hào):olzzcom ,文末也有公眾號(hào)二維碼,關(guān)注公眾號(hào)以后回復(fù)python,本站精心整理的Python書(shū)籍、軟件、工具都實(shí)時(shí)更新哦!本站所安裝的python3.10、IDLE中文版 、PyCharm、Visual Studio Code、Sublime Text4等都在里面哦!
2、站長(zhǎng)在線官方微信交流群已經(jīng)開(kāi)通了,微信掃碼進(jìn)入,一起交流,一起進(jìn)步!
本文地址:http://003188.cn/pythonyunsuanfu.html
阿里云虛擬主機(jī)1G空間,120元一年
香港、美國(guó)虛擬主機(jī)100元一年,1000元永久
騰訊云雙十一0.4折起,2核8G5M三年僅700元,2核4G8M三年僅198元
猜你喜歡