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

運算符

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

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

算術(shù)運算符

前面已經(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

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

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,翻譯成“非”,竊以為非常好,不論面對什么,就是要否定它。

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

關(guān)于運算符問題,其實不止上面這些,還有呢,比如成員運算符 in,在后面的學習中會逐漸遇到。


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

如果你認為有必要打賞我,請通過支付寶:qiwsir@126.com,不勝感激。

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