在編程語言,運算符是比較多樣化的,雖然在《常用數(shù)學函數(shù)和運算優(yōu)先級》中給出了一個各種運算符和其優(yōu)先級的表格,但是,那時對 Python 理解還比較膚淺。建議諸位先回頭看看那個表格,然后繼續(xù)下面的內(nèi)容。
這里將各種運算符總結(jié)一下,有復習,也有拓展。
前面已經(jīng)講過了四則運算,其中涉及到一些運算符:加減乘除,對應的符號分別是:+ - * /,此外,還有求余數(shù)的:%。這些都是算術(shù)運算符。其實,算術(shù)運算符不止這些。根據(jù)中學數(shù)學的知識,看官也應該想到,還應該有乘方、開方之類的。
下面列出一個表格,將所有的運算符表現(xiàn)出來。不用記,但是要認真地看一看,知道有那些,如果以后用到,但是不自信能夠記住,可以來查。
運算符 | 描述 | 實例 |
---|---|---|
+ | 加 - 兩個對象相加 | 10+20 輸出結(jié)果 30 |
- | 減 - 得到負數(shù)或是一個數(shù)減去另一個數(shù) | 10-20 輸出結(jié)果 -10 |
* | 乘 - 兩個數(shù)相乘或是返回一個被重復若干次的字符串 | 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ù)中學數(shù)學的知識,想想上面的運算符在混合運算中,應該按照什么順序計算。并且親自試試,是否與中學數(shù)學中的規(guī)律一致。(應該是一致的,計算機科學家不會另外搞一套讓我們和他們一塊受罪。)
所謂比較,就是比一比兩個東西。這在某國是最常見的了,做家長的經(jīng)常把自己的孩子跟別人的孩子比較,唯恐自己孩子在某方面差了;官員經(jīng)常把自己的收入和銀行比較,總覺得少了。
在計算機高級語言編程中,任何兩個同一類型的量的都可以比較,比如兩個數(shù)字可以比較,兩個字符串可以比較。注意,是兩個同一類型的。不同類型的量可以比較嗎?首先這種比較沒有意義。就好比二兩肉和三尺布進行比較,它們誰大呢?這種比較無意義。所以,在真正的編程中,我們要謹慎對待這種不同類型量的比較。
但是,在某些語言中,允許這種無意思的比較。因為它在比較的時候,都是將非數(shù)值的轉(zhuǎn)化為了數(shù)值類型比較。
對于比較運算符,在小學數(shù)學中就學習了一些:大于、小于、等于、不等于。沒有陌生的東西,Python 里面也是如此。且看下表:
以下假設變量 a 為 10,變量 b 為 20:
運算符 | 描述 | 實例 |
---|---|---|
== | 等于 - 比較對象是否相等 | (a == b) 返回 False。 |
!= | 不等于 - 比較兩個對象是否不相等 | (a != b) 返回 true. |
> | 大于 - 返回x是否大于y | (a > b) 返回 False。 |
< | 小于 - 返回x是否小于y | (a < b) 返回 true。 |
>= | 大于等于 - 返回x是否大于等于y。 | (a >= b) 返回 False。 |
<= | 小于等于 - 返回x是否小于等于y。 | (a <= b) 返回 true。 |
上面的表格實例中,顯示比較的結(jié)果就是返回一個 true 或者 false,這是什么意思呢。就是在告訴你,這個比較如果成立,就是為真,返回 True,否則返回 False,說明比較不成立。
請按照下面方式進行比較操作,然后再根據(jù)自己的想象,把比較操作熟練熟練。
>>> a=10
>>> b=20
>>> a>b
False
>>> a<b
True
>>> a==b
False
>>> a!=b
True
>>> a>=b
False
>>> a<=b
True
除了數(shù)字之外,還可以對字符串進行比較。字符串中的比較是按照“字典順序”進行比較的。當然,這里說的是英文的字典,不是前面說的字典數(shù)據(jù)類型。
>>> a = "qiwsir"
>>> b = "Python"
>>> a > b
True
先看第一個字符,按照字典順序,q 大于 p(在字典中,q 排在 p 的后面),那么就返回結(jié)果 True.
在 Python 中,如果是兩種不同類型的對象,雖然可以比較。但我是不贊成這樣進行比較的。
>>> a = 5
>>> b = "5"
>>> a > b
False
首先談談什么是邏輯,韓寒先生對邏輯有一個分類:
邏輯分兩種,一種是邏輯,另一種是中國人的邏輯?!n寒
這種分類的確非常精準。在很多情況下,中國人是有很奇葩的邏輯的。但是,在 Python 中,講的是邏輯,不是中國人的邏輯。
邏輯(logic),又稱理則、論理、推理、推論,是有效推論的哲學研究。邏輯被使用在大部份的智能活動中,但主要在哲學、數(shù)學、語義學和計算機科學等領(lǐng)域內(nèi)被視為一門學科。在數(shù)學里,邏輯是指研究某個形式語言的有效推論。
關(guān)于邏輯問題,看官如有興趣,可以聽一聽《國立臺灣大學公開課:邏輯》
在所有的高級語言中,都有這么一類變量,被稱之為布爾型。從這個名稱,看官就知道了,這是用一個人的名字來命名的。
喬治·布爾(George Boole,1815 年 11 月-1864 年,),英格蘭數(shù)學家、哲學家。
喬治·布爾是一個皮匠的兒子,生于英格蘭的林肯。由于家境貧寒,布爾不得不在協(xié)助養(yǎng)家的同時為自己能受教育而奮斗,不管怎么說,他成了 19 世紀最重要的數(shù)學家之一。盡管他考慮過以牧師為業(yè),但最終還是決定從教,而且不久就開辦了自己的學校。
在備課的時候,布爾不滿意當時的數(shù)學課本,便決定閱讀偉大數(shù)學家的論文。在閱讀偉大的法國數(shù)學家拉格朗日的論文時,布爾有了變分法方面的新發(fā)現(xiàn)。變分法是數(shù)學分析的分支,它處理的是尋求優(yōu)化某些參數(shù)的曲線和曲面。
1848 年,布爾出版了《The Mathematical Analysis of Logic》,這是他對符號邏輯諸多貢獻中的第一次。
1849 年,他被任命位于愛爾蘭科克的皇后學院(今科克大學或 UCC)的數(shù)學教授。1854 年,他出版了《The Laws of Thought》,這是他最著名的著作。在這本書中布爾介紹了現(xiàn)在以他的名字命名的布爾代數(shù)。布爾撰寫了微分方程和差分方程的課本,這些課本在英國一直使用到 19 世紀末。
由于其在符號邏輯運算中的特殊貢獻,很多計算機語言中將邏輯運算稱為布爾運算,將其結(jié)果稱為布爾值。
請看官認真閱讀布爾的生平,勵志呀。
布爾所創(chuàng)立的這套邏輯被稱之為“布爾代數(shù)”。其中規(guī)定只有兩種值,True 和 False,正好對應這計算機上二進制數(shù)的 1 和 0。所以,布爾代數(shù)和計算機是天然吻合的。
所謂布爾類型,就是返回結(jié)果為 1(True)、0(False)的數(shù)據(jù)變量。
在 Python 中(其它高級語言也類似,其實就是布爾代數(shù)的運算法則),有三種運算符,可以實現(xiàn)布爾類型的變量間的運算。
看下面的表格,對這種邏輯運算符比較容易理解:
(假設變量 a 為 10,變量 b 為 20)
運算符 | 描述 | 實例 |
---|---|---|
and | 布爾"與" - 如果 x 為 False,x and y 返回 False,否則它返回 y 的計算值。 | (a and b) 返回 true。 |
or | 布爾"或" - 如果 x 是 True,它返回 True,否則它返回 y 的計算值。 | (a or b) 返回 true。 |
not | 布爾"非" - 如果 x 為 True,返回 False。如果 x 為 False,它返回 True。 | not(a and b) 返回 false。 |
and,翻譯為“與”運算,但事實上,這種翻譯容易引起望文生義的理解。先說一下正確的理解。A and B,含義是:首先運算 A,如果 A 的值是 true,就計算 B,并將 B 的結(jié)果返回做為最終結(jié)果,如果 B 是 False,那么 A and B 的最終結(jié)果就是 False,如果 B 的結(jié)果是 True,那么 A and B 的結(jié)果就是 True;如果 A 的值是 False ,就不計算 B 了,直接返回 A and B 的結(jié)果為 False.
比如:
4>3 and 4<9
,首先看 4>3
的值,這個值是 True
,再看 4<9
的值,是 True
,那么最終這個表達式的結(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
,就不看后面的了,直接返回這個結(jié)果做為最終結(jié)果(對這種現(xiàn)象,有一個形象的說法,叫做“短路”。這個說法形象嗎?不熟悉物理的是不是感覺形象?)。
>>> 4<3 and 4<2
False
前面說容易引起望文生義的理解,就是有相當不少的人認為無論什么時候都看 and 兩邊的值,都是 true 返回 true,有一個是 false 就返回 false。根據(jù)這種理解得到的結(jié)果,與前述理解得到的結(jié)果一樣,但是,運算量不一樣哦。
or,翻譯為“或”運算。在 A or B 中,它是這么運算的:
if A==True:
return True
else:
if B==True:
return True
else if B==False:
return False
上面這段算是偽代碼啦。所謂偽代碼,就是不是真正的代碼,無法運行。但是,偽代碼也有用途,就是能夠以類似代碼的方式表達一種計算過程。
看官是不是能夠看懂上面的偽代碼呢?下面再增加上每行的注釋。這個偽代碼跟自然的英語差不多呀。
if A==True: #如果 A 的值是 True
return True #返回 True,表達式最終結(jié)果是 True
else: #否則,也就是 A 的值不是 True
if B==True: #看 B 的值,然后就返回B的值做為最終結(jié)果。
return True
else if B==False:
return False
舉例,根據(jù)上面的運算過程,分析一下下面的例子,是不是與運算結(jié)果一致?
>>> 4<3 or 4<9
True
>>> 4<3 or 4>9
False
>>> 4>3 or 4>9
True
not,翻譯成“非”,竊以為非常好,不論面對什么,就是要否定它。
>>> not(4>3)
False
>>> not(4<3)
True
關(guān)于運算符問題,其實不止上面這些,還有呢,比如成員運算符 in,在后面的學習中會逐漸遇到。
總目錄 | 上節(jié):集合(2) | 下節(jié):語句(1)
如果你認為有必要打賞我,請通過支付寶:qiwsir@126.com,不勝感激。