在計算機高級中語言,運算符是比較多樣化的。其實,也都源于我們日常的需要。
## 算術運算符
前面已經講過了四則運算,其中涉及到一些運算符:加減乘除,對應的符號分別是:+ - * /,此外,還有求余數的:%。這些都是算術運算符。其實,算術運算符不止這些。根據中學數學的知識,看官也應該想到,還應該有乘方、開方之類的。
下面列出一個表格,將所有的運算符表現出來。不用記,但是要認真地看一看,知道有那些,如果以后用到,但是不自信能夠記住,可以來查。
| 運算符 | 描述 | 實例 |
|-----|-----|-----|
| + | 加 - 兩個對象相加 | 10+20 輸出結果 30 |
| - | 減 - 得到負數或是一個數減去另一個數 | 10-20 輸出結果 -10 |
| * | 乘 - 兩個數相乘或是返回一個被重復若干次的字符串 | 10 * 20 輸出結果 200 |
| / | 除 - x除以y | 20/10 輸出結果 2 |
| % | 取余 - 返回除法的余數 | 20%10 輸出結果 0 |
| ** | 冪 - 返回x的y次冪 | 10**2 輸出結果 100 |
| // | 取整除 - 返回商的整數部分 | 9//2 輸出結果 4 , 9.0//2.0 輸出結果 4.0 |
是不是看著并不陌生呀。這里有一個建議給看官,請打開你的IDLE,依次將上面的運算符實驗一下。
列為看官可以根據中學數學的知識,想想上面的運算符在混合運算中,應該按照什么順序計算。并且親自試試,是否與中學數學中的規律一致。(應該是一致的,計算機科學家不會另外搞一套讓我們和他們一塊受罪。)
## 比較運算符
所謂比較,就是比一比兩個東西。這在某國是最常見的了,做家長的經常把自己的孩子跟別人的孩子比較,唯恐自己孩子在某方面差了;官員經常把自己的工資和銀行比較,總覺得少了。
在計算機高級語言編程中,任何兩個同一類型的量的都可以比較,比如兩個數字可以比較,兩個字符串可以比較。注意,是兩個同一類型的。不同類型的量可以比較嗎?首先這種比較沒有意義。就好比二兩肉和三尺布進行比較,它們誰大呢?這種比較無意義。所以,在真正的編程中,我們要謹慎對待這種不同類型量的比較。
但是,在某些語言中,允許這種無意思的比較。因為它在比較的時候,都是將非數值的轉化為了數值類型比較。這個后面我們會做個實驗。
對于比較運算符,在小學數學中就學習了一些:大于、小于、等于、不等于。沒有陌生的東西,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。 |
上面的表格實例中,顯示比較的結果就是返回一個true或者false,這是什么意思呢。就是在告訴你,這個比較如果成立,就是為真,返回True,否則返回False,說明比較不成立。
請按照下面方式進行比較操作,然后再根據自己的想象,把比較操作熟練熟練。
~~~
>>> a=10
>>> b=20
>>> a>b
False
>>> a<b
True
>>> a==b
False
>>> a!=b
True
>>> a>=b
False
>>> a<=b
True
>>> c="5" #a、c是兩個不同類型的量,能比較,但是不提倡這么做。
>>> a>c
False
>>> a<c
True
~~~
## 邏輯運算符
首先談談什么是邏輯,韓寒先生對邏輯有一個分類:
> 邏輯分兩種,一種是邏輯,另一種是中國人的邏輯。————韓寒
這種分類的確非常精準。在很多情況下,中國人是有很奇葩的邏輯的。但是,在python中,講的是邏輯,不是中國人的邏輯。
> 邏輯(logic),又稱理則、論理、推理、推論,是有效推論的哲學研究。邏輯被使用在大部份的智能活動中,但主要在哲學、數學、語義學和計算機科學等領域內被視為一門學科。在數學里,邏輯是指研究某個形式語言的有效推論。
關于邏輯問題,看官如有興趣,可以聽一聽[《國立臺灣大學公開課:邏輯》](http://v.163.com/special/ntu/luoji.html)
下面簡單理解一下邏輯問題。
## 布爾類型的變量
在所有的高級語言中,都有這么一類變量,被稱之為布爾型。從這個名稱,看官就知道了,這是用一個人的名字來命名的。
> 喬治·布爾(George Boole,1815年11月-1864年,),英格蘭數學家、哲學家。
> 喬治·布爾是一個皮匠的兒子,生于英格蘭的林肯。由于家境貧寒,布爾不得不在協助養家的同時為自己能受教育而奮斗,不管怎么說,他成了19世紀最重要的數學家之一。盡管他考慮過以牧師為業,但最終還是決定從教,而且不久就開辦了自己的學校。
> 在備課的時候,布爾不滿意當時的數學課本,便決定閱讀偉大數學家的論文。在閱讀偉大的法國數學家拉格朗日的論文時,布爾有了變分法方面的新發現。變分法是數學分析的分支,它處理的是尋求優化某些參數的曲線和曲面。
> 1848年,布爾出版了《The Mathematical Analysis of Logic》,這是他對符號邏輯諸多貢獻中的第一次。
> 1849年,他被任命位于愛爾蘭科克的皇后學院(今科克大學或UCC)的數學教授。1854年,他出版了《The Laws of Thought》,這是他最著名的著作。在這本書中布爾介紹了現在以他的名字命名的布爾代數。布爾撰寫了微分方程和差分方程的課本,這些課本在英國一直使用到19世紀末。由于其在符號邏輯運算中的特殊貢獻,很多計算機語言中將邏輯運算稱為布爾運算,將其結果稱為布爾值。
請看官認真閱讀布爾的生平,立志呀。
布爾所創立的這套邏輯被稱之為“布爾代數”。其中規定只有兩種值,True和False,正好對應這計算機上二進制數的1和0。所以,布爾代數和計算機是天然吻合的。
所謂布爾類型,就是返回結果為1(True)、0(False)的數據變量。
在python中(其它高級語言也類似,其實就是布爾代數的運算法則),有三種運算符,可以實現布爾類型的變量間的運算。
## 布爾運算
看下面的表格,對這種邏輯運算符比較容易理解:
(假設變量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
and,翻譯為“與”運算,但事實上,這種翻譯容易引起望文生義的理解。先說一下正確的理解。A and B,含義是:首先運算A,如果A的值是true,就計算B,并將B的結果返回做為最終結果,如果B是False,那么A and B的最終結果就是False,如果B的結果是True,那么A and B的結果就是True;如果A的值是False ,就不計算B了,直接返回A and B的結果為False.
比如:
`4>3 and 4<9`,首先看`4>3`的值,這個值是`True`,再看`4<9`的值,是`True`,那么最終這個表達式的結果為`True`.
~~~
>>> 4>3 and 4<9
True
~~~
`4>3 and 4<2`,先看`4>3`,返回`True`,再看`4<2`,返回的是`False`,那么最終結果是`False`.
~~~
>>> 4>3 and 4<2
False
~~~
`4<3 and 4<9`,先看`4<3`,返回為`False`,就不看后面的了,直接返回這個結果做為最終結果。
~~~
>>> 4<3 and 4<2
False
~~~
前面說容易引起望文生義的理解,就是有相當不少的人認為無論什么時候都看and兩邊的值,都是true返回true,有一個是false就返回false。根據這種理解得到的結果,與前述理解得到的結果一樣,但是,運算量不一樣哦。
- or
or,翻譯為“或”運算。在A and 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,表達式最終結果是True
else: #否則,也就是A的值不是True
if B==True: #看B的值,然后就返回B的值做為最終結果。
return True
else if B==False:
return False
~~~
舉例,根據上面的運算過程,分析一下下面的例子,是不是與運算結果一致?
~~~
>>> 4<3 or 4<9
True
>>> 4<3 or 4>9
False
>>> 4>3 or 4>9
True
~~~
- not
not,翻譯成“非”,竊以為非常好,不論面對什么,就是要否定它。
~~~
>>> not(4>3)
False
>>> not(4<3)
True
~~~
關于運算符問題,其實不止上面這些,還有呢,比如成員運算符in,在后面的學習中會逐漸遇到。
- 第零部分 獨上高樓,望盡天涯路
- 嘮叨一些關于Python的事情
- 為什么要開設本欄目
- 第一部分 積小流,至江海
- Python環境安裝
- 集成開發環境(IDE)
- 數的類型和四則運算
- 啰嗦的除法
- 開始真正編程
- 初識永遠強大的函數
- 玩轉字符串(1):基本概念、字符轉義、字符串連接、變量與字符串關系
- 玩轉字符串(2)
- 玩轉字符串(3)
- 眼花繚亂的運算符
- 從if開始語句的征程
- 一個免費的實驗室
- 有容乃大的list(1)
- 有容乃大的list(2)
- 有容乃大的list(3)
- 有容乃大的list(4)
- list和str比較
- 畫圈還不簡單嗎
- 再深點,更懂list
- 字典,你還記得嗎?
- 字典的操作方法
- 有點簡約的元組
- 一二三,集合了
- 集合的關系
- Python數據類型總結
- 深入變量和引用對象
- 賦值,簡單也不簡單
- 坑爹的字符編碼
- 做一個小游戲
- 不要紅頭文件(1): open, write, close
- 不要紅頭文件(2): os.stat, closed, mode, read, readlines, readline
- 第二部分 窮千里目,上一層樓
- 正規地說一句話
- print能干的事情
- 從格式化表達式到方法
- 復習if語句
- 用while來循環
- 難以想象的for
- 關于循環的小伎倆
- 讓人歡喜讓人憂的迭代
- 大話題小函數(1)
- 大話題小函數(2)
- python文檔
- 重回函數
- 變量和參數
- 總結參數的傳遞
- 傳說中的函數條規
- 關于類的基本認識
- 編寫類之一創建實例
- 編寫類之二方法
- 編寫類之三子類
- 編寫類之四再論繼承
- 命名空間
- 類的細節
- Import 模塊
- 模塊的加載
- 私有和專有
- 折騰一下目錄: os.path.<attribute>
- 第三部分 昨夜西風,亭臺誰登
- 網站的結構:網站組成、MySQL數據庫的安裝和配置、MySQL的運行
- 通過Python連接數據庫:安裝python-MySQLdb,連接MySQL
- 用Pyton操作數據庫(1):建立連接和游標,并insert and commit
- 用Python操作數據庫(2)
- 用Python操作數據庫(3)
- python開發框架:框架介紹、Tornado安裝
- Hello,第一個網頁分析:tornado網站的基本結構剖析:improt模塊、RequestHandler, HTTPServer, Application, IOLoop
- 實例分析get和post:get()通過URL得到數據和post()通過get_argument()獲取數據
- 問候世界:利用GAE建立tornado框架網站
- 使用表單和模板:tornado模板self.render和模板變量傳遞
- 模板中的語法:tornado模板中的for,if,set等語法
- 靜態文件以及一個項目框架
- 模板轉義
- 第四部分 暮然回首,燈火闌珊處
- requests庫
- 比較json/dictionary的庫
- defaultdict 模塊和 namedtuple 模塊
- 第五部分 Python備忘錄
- 基本的(字面量)值
- 運算符
- 常用的內建函數
- 擴展閱讀(來自網絡文章)
- 人生苦短,我用Python