跟老齊學Python之眼花繚亂的運算子_python

來源:互聯網
上載者:User

在電腦進階中語言,運算子是比較多樣化的。其實,也都源於我們日常的需要。

算術運算子

前面已經講過了四則運算,其中涉及到一些運算子:加減乘除,對應的符號分別是:+ - * /,此外,還有求餘數的:%。這些都是算術運算子。其實,算術運算子不止這些。根據中學數學的知識,看官也應該想到,還應該有乘方、開方之類的。

下面列出一個表格,將所有的運算子表現出來。不用記,但是要認真地看一看,知道有那些,如果以後用到,但是不自信能夠記住,可以來查。

運算子 描述 執行個體
+ 加 - 兩個對象相加 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>bFalse>>> a<bTrue>>> a==bFalse>>> a!=bTrue>>> a>=bFalse>>> a<=bTrue>>> c="5"  #a、c是兩個不同類型的量,能比較,但是不提倡這麼做。>>> a>cFalse>>> a<cTrue

邏輯運算子

首先談談什麼是邏輯,韓寒先生對邏輯有一個分類:

邏輯分兩種,一種是邏輯,另一種是中國人的邏輯。————韓寒

這種分類的確非常精準。在很多情況下,中國人是有很奇葩的邏輯的。但是,在python中,講的是邏輯,不是中國人的邏輯。

邏輯(logic),又稱理則、論理、推理、推論,是有效推論的哲學研究。邏輯被使用在大部份的智能活動中,但主要在哲學、數學、語意學和電腦科學等領域內被視為一門學科。在數學裡,邏輯是指研究某個形式語言的有效推論。

關於邏輯問題,看官如有興趣,可以聽一聽《國立台灣大學公開課:邏輯》

下面簡單理解一下邏輯問題。

布爾類型的變數

在所有的進階語言中,都有這麼一類變數,被稱之為布爾型。從這個名稱,看官就知道了,這是用一個人的名字來命名的。

喬治·布爾(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<9True

4>3 and 4<2,先看4>3,返回True,再看4<2,返回的是False,那麼最終結果是False.

>>> 4>3 and 4<2False

4<3 and 4<9,先看4<3,返回為False,就不看後面的了,直接返回這個結果做為最終結果。

>>> 4<3 and 4<2False

前面說容易引起望文生義的理解,就是有相當不少的人認為無論什麼時候都看and兩邊的值,都是true返回true,有一個是false就返回false。根據這種理解得到的結果,與前述理解得到的結果一樣,但是,運算量不一樣哦。

or

or,翻譯為“或”運算。在A and B中,它是這麼運算的:

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

上面這段算是虛擬碼啦。所謂虛擬碼,就是不是真正的代碼,無法運行。但是,虛擬碼也有用途,就是能夠以類似代碼的方式表達一種計算過程。

看官是不是能夠看懂上面的虛擬碼呢?下面再增加上每行的注釋。這個虛擬碼跟自然的英語差不多呀。

if A==True:     #如果A的值是True  return True   #返回True,運算式最終結果是Trueelse:        #否則,也就是A的值不是True  if B==True:   #看B的值,然後就返回B的值做為最終結果。    return True  else if B==False:    return False
舉例,根據上面的運算過程,分析一下下面的例子,是不是與運算結果一致?
>>> 4<3 or 4<9True>>> 4<3 or 4>9False>>> 4>3 or 4>9True
not

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

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

關於運算子問題,其實不止上面這些,還有呢,比如成員運算子in,在後面的學習中會逐漸遇到。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.