鍍金池/ 教程/ Python/ 運(yùn)算符
標(biāo)準(zhǔn)庫(kù) (4)
如何成為 Python 高手
標(biāo)準(zhǔn)庫(kù) (6)
標(biāo)準(zhǔn)庫(kù) (3)
類(lèi)(2)
Pandas 使用 (2)
xml
用 tornado 做網(wǎng)站 (5)
文件(1)
練習(xí)
列表(3)
從小工到專(zhuān)家
除法
錯(cuò)誤和異常 (2)
函數(shù)(1)
用 tornado 做網(wǎng)站 (7)
為做網(wǎng)站而準(zhǔn)備
函數(shù)練習(xí)
標(biāo)準(zhǔn)庫(kù) (8)
Pandas 使用 (1)
回顧 list 和 str
字典(1)
用 tornado 做網(wǎng)站 (3)
字符串(1)
函數(shù)(2)
寫(xiě)一個(gè)簡(jiǎn)單的程序
將數(shù)據(jù)存入文件
語(yǔ)句(5)
SQLite 數(shù)據(jù)庫(kù)
集成開(kāi)發(fā)環(huán)境(IDE)
集合(1)
類(lèi)(1)
用 tornado 做網(wǎng)站 (6)
用 tornado 做網(wǎng)站 (2)
自省
語(yǔ)句(4)
錯(cuò)誤和異常 (1)
用 tornado 做網(wǎng)站 (4)
集合(2)
列表(1)
標(biāo)準(zhǔn)庫(kù) (1)
生成器
mysql 數(shù)據(jù)庫(kù) (1)
第三方庫(kù)
實(shí)戰(zhàn)
運(yùn)算符
類(lèi)(3)
字典(2)
語(yǔ)句(1)
數(shù)和四則運(yùn)算
語(yǔ)句(2)
文件(2)
MySQL 數(shù)據(jù)庫(kù) (2)
電子表格
迭代器
mongodb 數(shù)據(jù)庫(kù) (1)
特殊方法 (2)
特殊方法 (1)
字符編碼
編寫(xiě)模塊
用 tornado 做網(wǎng)站 (1)
標(biāo)準(zhǔn)庫(kù) (5)
函數(shù)(4)
類(lèi)(5)
字符串(2)
關(guān)于 Python 的故事
函數(shù)(3)
字符串(4)
處理股票數(shù)據(jù)
常用數(shù)學(xué)函數(shù)和運(yùn)算優(yōu)先級(jí)
字符串(3)
為計(jì)算做準(zhǔn)備
多態(tài)和封裝
類(lèi)(4)
迭代
語(yǔ)句(3)
錯(cuò)誤和異常 (3)
分析 Hello
Python 安裝
標(biāo)準(zhǔn)庫(kù) (2)
列表(2)
元組

運(yùn)算符

在編程語(yǔ)言,運(yùn)算符是比較多樣化的,雖然在《常用數(shù)學(xué)函數(shù)和運(yùn)算優(yōu)先級(jí)》中給出了一個(gè)各種運(yùn)算符和其優(yōu)先級(jí)的表格,但是,那時(shí)對(duì) Python 理解還比較膚淺。建議諸位先回頭看看那個(gè)表格,然后繼續(xù)下面的內(nèi)容。

這里將各種運(yùn)算符總結(jié)一下,有復(fù)習(xí),也有拓展。

算術(shù)運(yùn)算符

前面已經(jīng)講過(guò)了四則運(yùn)算,其中涉及到一些運(yùn)算符:加減乘除,對(duì)應(yīng)的符號(hào)分別是:+ - * /,此外,還有求余數(shù)的:%。這些都是算術(shù)運(yùn)算符。其實(shí),算術(shù)運(yùn)算符不止這些。根據(jù)中學(xué)數(shù)學(xué)的知識(shí),看官也應(yīng)該想到,還應(yīng)該有乘方、開(kāi)方之類(lèi)的。

下面列出一個(gè)表格,將所有的運(yùn)算符表現(xiàn)出來(lái)。不用記,但是要認(rèn)真地看一看,知道有那些,如果以后用到,但是不自信能夠記住,可以來(lái)查。

運(yùn)算符 描述 實(shí)例
+ 加 - 兩個(gè)對(duì)象相加 10+20 輸出結(jié)果 30
- 減 - 得到負(fù)數(shù)或是一個(gè)數(shù)減去另一個(gè)數(shù) 10-20 輸出結(jié)果 -10
* 乘 - 兩個(gè)數(shù)相乘或是返回一個(gè)被重復(fù)若干次的字符串 10 * 20 輸出結(jié)果 200
/ 除 - x除以y 20/10 輸出結(jié)果 2
% 取余 - 返回除法的余數(shù) 20%10 輸出結(jié)果 0
** 冪 - 返回x的y次冪 10**2 輸出結(jié)果 100
// 取整除 - 返回商的整數(shù)部分 9//2 輸出結(jié)果 4 , 9.0//2.0 輸出結(jié)果 4.0

列為看官可以根據(jù)中學(xué)數(shù)學(xué)的知識(shí),想想上面的運(yùn)算符在混合運(yùn)算中,應(yīng)該按照什么順序計(jì)算。并且親自試試,是否與中學(xué)數(shù)學(xué)中的規(guī)律一致。(應(yīng)該是一致的,計(jì)算機(jī)科學(xué)家不會(huì)另外搞一套讓我們和他們一塊受罪。)

比較運(yùn)算符

所謂比較,就是比一比兩個(gè)東西。這在某國(guó)是最常見(jiàn)的了,做家長(zhǎng)的經(jīng)常把自己的孩子跟別人的孩子比較,唯恐自己孩子在某方面差了;官員經(jīng)常把自己的收入和銀行比較,總覺(jué)得少了。

在計(jì)算機(jī)高級(jí)語(yǔ)言編程中,任何兩個(gè)同一類(lèi)型的量的都可以比較,比如兩個(gè)數(shù)字可以比較,兩個(gè)字符串可以比較。注意,是兩個(gè)同一類(lèi)型的。不同類(lèi)型的量可以比較嗎?首先這種比較沒(méi)有意義。就好比二兩肉和三尺布進(jìn)行比較,它們誰(shuí)大呢?這種比較無(wú)意義。所以,在真正的編程中,我們要謹(jǐn)慎對(duì)待這種不同類(lèi)型量的比較。

但是,在某些語(yǔ)言中,允許這種無(wú)意思的比較。因?yàn)樗诒容^的時(shí)候,都是將非數(shù)值的轉(zhuǎn)化為了數(shù)值類(lèi)型比較。

對(duì)于比較運(yùn)算符,在小學(xué)數(shù)學(xué)中就學(xué)習(xí)了一些:大于、小于、等于、不等于。沒(méi)有陌生的東西,Python 里面也是如此。且看下表:

以下假設(shè)變量 a 為 10,變量 b 為 20:

運(yùn)算符 描述 實(shí)例
== 等于 - 比較對(duì)象是否相等 (a == b) 返回 False。
!= 不等于 - 比較兩個(gè)對(duì)象是否不相等 (a != b) 返回 true.
> 大于 - 返回x是否大于y (a > b) 返回 False。
< 小于 - 返回x是否小于y (a < b) 返回 true。
>= 大于等于 - 返回x是否大于等于y。 (a >= b) 返回 False。
<= 小于等于 - 返回x是否小于等于y。 (a <= b) 返回 true。

上面的表格實(shí)例中,顯示比較的結(jié)果就是返回一個(gè) true 或者 false,這是什么意思呢。就是在告訴你,這個(gè)比較如果成立,就是為真,返回 True,否則返回 False,說(shuō)明比較不成立。

請(qǐng)按照下面方式進(jìn)行比較操作,然后再根據(jù)自己的想象,把比較操作熟練熟練。

>>> a=10
>>> b=20
>>> a>b
False
>>> a<b
True
>>> a==b
False
>>> a!=b
True
>>> a>=b
False
>>> a<=b
True

除了數(shù)字之外,還可以對(duì)字符串進(jìn)行比較。字符串中的比較是按照“字典順序”進(jìn)行比較的。當(dāng)然,這里說(shuō)的是英文的字典,不是前面說(shuō)的字典數(shù)據(jù)類(lèi)型。

>>> a = "qiwsir"
>>> b = "Python"
>>> a > b
True

先看第一個(gè)字符,按照字典順序,q 大于 p(在字典中,q 排在 p 的后面),那么就返回結(jié)果 True.

在 Python 中,如果是兩種不同類(lèi)型的對(duì)象,雖然可以比較。但我是不贊成這樣進(jìn)行比較的。

>>> a = 5
>>> b = "5"
>>> a > b
False

邏輯運(yùn)算符

首先談?wù)勈裁词沁壿?,韓寒先生對(duì)邏輯有一個(gè)分類(lèi):

邏輯分兩種,一種是邏輯,另一種是中國(guó)人的邏輯?!n寒

這種分類(lèi)的確非常精準(zhǔn)。在很多情況下,中國(guó)人是有很奇葩的邏輯的。但是,在 Python 中,講的是邏輯,不是中國(guó)人的邏輯。

邏輯(logic),又稱理則、論理、推理、推論,是有效推論的哲學(xué)研究。邏輯被使用在大部份的智能活動(dòng)中,但主要在哲學(xué)、數(shù)學(xué)、語(yǔ)義學(xué)和計(jì)算機(jī)科學(xué)等領(lǐng)域內(nèi)被視為一門(mén)學(xué)科。在數(shù)學(xué)里,邏輯是指研究某個(gè)形式語(yǔ)言的有效推論。

關(guān)于邏輯問(wèn)題,看官如有興趣,可以聽(tīng)一聽(tīng)《國(guó)立臺(tái)灣大學(xué)公開(kāi)課:邏輯》

布爾類(lèi)型的變量

在所有的高級(jí)語(yǔ)言中,都有這么一類(lèi)變量,被稱之為布爾型。從這個(gè)名稱,看官就知道了,這是用一個(gè)人的名字來(lái)命名的。

喬治·布爾(George Boole,1815 年 11 月-1864 年,),英格蘭數(shù)學(xué)家、哲學(xué)家。

喬治·布爾是一個(gè)皮匠的兒子,生于英格蘭的林肯。由于家境貧寒,布爾不得不在協(xié)助養(yǎng)家的同時(shí)為自己能受教育而奮斗,不管怎么說(shuō),他成了 19 世紀(jì)最重要的數(shù)學(xué)家之一。盡管他考慮過(guò)以牧師為業(yè),但最終還是決定從教,而且不久就開(kāi)辦了自己的學(xué)校。

在備課的時(shí)候,布爾不滿意當(dāng)時(shí)的數(shù)學(xué)課本,便決定閱讀偉大數(shù)學(xué)家的論文。在閱讀偉大的法國(guó)數(shù)學(xué)家拉格朗日的論文時(shí),布爾有了變分法方面的新發(fā)現(xiàn)。變分法是數(shù)學(xué)分析的分支,它處理的是尋求優(yōu)化某些參數(shù)的曲線和曲面。

1848 年,布爾出版了《The Mathematical Analysis of Logic》,這是他對(duì)符號(hào)邏輯諸多貢獻(xiàn)中的第一次。

1849 年,他被任命位于愛(ài)爾蘭科克的皇后學(xué)院(今科克大學(xué)或 UCC)的數(shù)學(xué)教授。1854 年,他出版了《The Laws of Thought》,這是他最著名的著作。在這本書(shū)中布爾介紹了現(xiàn)在以他的名字命名的布爾代數(shù)。布爾撰寫(xiě)了微分方程和差分方程的課本,這些課本在英國(guó)一直使用到 19 世紀(jì)末。

由于其在符號(hào)邏輯運(yùn)算中的特殊貢獻(xiàn),很多計(jì)算機(jī)語(yǔ)言中將邏輯運(yùn)算稱為布爾運(yùn)算,將其結(jié)果稱為布爾值。

請(qǐng)看官認(rèn)真閱讀布爾的生平,勵(lì)志呀。

布爾所創(chuàng)立的這套邏輯被稱之為“布爾代數(shù)”。其中規(guī)定只有兩種值,True 和 False,正好對(duì)應(yīng)這計(jì)算機(jī)上二進(jìn)制數(shù)的 1 和 0。所以,布爾代數(shù)和計(jì)算機(jī)是天然吻合的。

所謂布爾類(lèi)型,就是返回結(jié)果為 1(True)、0(False)的數(shù)據(jù)變量。

在 Python 中(其它高級(jí)語(yǔ)言也類(lèi)似,其實(shí)就是布爾代數(shù)的運(yùn)算法則),有三種運(yùn)算符,可以實(shí)現(xiàn)布爾類(lèi)型的變量間的運(yùn)算。

布爾運(yùn)算

看下面的表格,對(duì)這種邏輯運(yùn)算符比較容易理解:

(假設(shè)變量 a 為 10,變量 b 為 20)

運(yùn)算符 描述 實(shí)例
and 布爾"與" - 如果 x 為 False,x and y 返回 False,否則它返回 y 的計(jì)算值。 (a and b) 返回 true。
or 布爾"或" - 如果 x 是 True,它返回 True,否則它返回 y 的計(jì)算值。 (a or b) 返回 true。
not 布爾"非" - 如果 x 為 True,返回 False。如果 x 為 False,它返回 True。 not(a and b) 返回 false。
  • and

and,翻譯為“與”運(yùn)算,但事實(shí)上,這種翻譯容易引起望文生義的理解。先說(shuō)一下正確的理解。A and B,含義是:首先運(yùn)算 A,如果 A 的值是 true,就計(jì)算 B,并將 B 的結(jié)果返回做為最終結(jié)果,如果 B 是 False,那么 A and B 的最終結(jié)果就是 False,如果 B 的結(jié)果是 True,那么 A and B 的結(jié)果就是 True;如果 A 的值是 False ,就不計(jì)算 B 了,直接返回 A and B 的結(jié)果為 False.

比如:

4>3 and 4<9,首先看 4>3 的值,這個(gè)值是 True,再看 4<9 的值,是 True,那么最終這個(gè)表達(dá)式的結(jié)果為 True.

>>> 4>3 and 4<9
True

4>3 and 4<2,先看 4>3,返回 True,再看 4<2,返回的是 False,那么最終結(jié)果是 False.

>>> 4>3 and 4<2
False

4<3 and 4<9,先看 4<3,返回為 False,就不看后面的了,直接返回這個(gè)結(jié)果做為最終結(jié)果(對(duì)這種現(xiàn)象,有一個(gè)形象的說(shuō)法,叫做“短路”。這個(gè)說(shuō)法形象嗎?不熟悉物理的是不是感覺(jué)形象?)。

>>> 4<3 and 4<2
False

前面說(shuō)容易引起望文生義的理解,就是有相當(dāng)不少的人認(rèn)為無(wú)論什么時(shí)候都看 and 兩邊的值,都是 true 返回 true,有一個(gè)是 false 就返回 false。根據(jù)這種理解得到的結(jié)果,與前述理解得到的結(jié)果一樣,但是,運(yùn)算量不一樣哦。

  • or

or,翻譯為“或”運(yùn)算。在 A or B 中,它是這么運(yùn)算的:

if A==True:
    return True
else:
    if B==True:
        return True
    else if B==False:
        return False

上面這段算是偽代碼啦。所謂偽代碼,就是不是真正的代碼,無(wú)法運(yùn)行。但是,偽代碼也有用途,就是能夠以類(lèi)似代碼的方式表達(dá)一種計(jì)算過(guò)程。

看官是不是能夠看懂上面的偽代碼呢?下面再增加上每行的注釋。這個(gè)偽代碼跟自然的英語(yǔ)差不多呀。

if A==True:         #如果 A 的值是 True
    return True     #返回 True,表達(dá)式最終結(jié)果是 True
else:               #否則,也就是 A 的值不是 True
    if B==True:     #看 B 的值,然后就返回B的值做為最終結(jié)果。
        return True
    else if B==False:
        return False

舉例,根據(jù)上面的運(yùn)算過(guò)程,分析一下下面的例子,是不是與運(yùn)算結(jié)果一致?

>>> 4<3 or 4<9
True
>>> 4<3 or 4>9
False
>>> 4>3 or 4>9
True
  • not

not,翻譯成“非”,竊以為非常好,不論面對(duì)什么,就是要否定它。

>>> not(4>3)
False
>>> not(4<3)
True

關(guān)于運(yùn)算符問(wèn)題,其實(shí)不止上面這些,還有呢,比如成員運(yùn)算符 in,在后面的學(xué)習(xí)中會(huì)逐漸遇到。


總目錄   |   上節(jié):集合(2)   |   下節(jié):語(yǔ)句(1)

如果你認(rèn)為有必要打賞我,請(qǐng)通過(guò)支付寶:qiwsir@126.com,不勝感激。

上一篇:字符串(1)下一篇:類(lèi)(3)