0基礎學Python之三:數字運算(上)

https://www.zhihu.com/video/958365829943865344

Hi 大家好,我是王可樂。在前面的課程中,可樂帶大家一起安裝了 Python 運行環境,演示了 Python Shell 的互動式界面,並且一起玩兒了一個猜數字的小遊戲。如果你完全沒有編程經驗,看不懂我們的遊戲代碼,一點都不用擔心。從今天起,可樂就要開始為大家介紹 Python 編程的方方面面,只需要跟著可樂一點一點學習,動手操作,很快你就能夠通過編程實現自己的想法了。

今天這一節課,可樂先給大家介紹一下 Python 里的數字。在前面的課程中我們已經見到過 Python 解釋器的交互模式 Python Shell,讓我們再次打開它,輸入 6 * 7,回車,答案還是 42。

這裡,6 和 7 是兩個整數,星號則表示乘法運算。在 Python 語言中,整數用 int 來表示,和小學數學中的整數一樣,例如 6, 7, -1, 0, 42 等;相應的還有浮點數 float,對應小學數學中的小數,例如 1.0, -2.2;此外還有複數 complex,這種數我們在中學數學中學習過,例如 1+1j, 12j 等。在 Python 中使用整數和浮點數沒有什麼特別之處,只需要原樣輸入即可;複數的使用也很簡單,但相對少見,可樂會在以後的課程中再為大家介紹。

我們可以用內置函數 type() 來查看數據的類型,看起來是不是很像中學數學中教的函數?關於函數和內置函數的概念可樂也會在以後的課程中介紹。這裡,你只需要像這樣輸入:type(42),回車。我們看到,Python 告訴你 42 的類型是 <class int>,這裡的 class 表示類,但今天我們只關注後面的 int,也就是說 42 是 int 類型的。

同樣的,我們試一試 type(-1.0),可以看到 -1.0 是 float 類型,也就是說它是一個小數;而 type(-1) 則是 int 類型,他們數值雖然相等,但類型不一樣哦。如果你對前面提到的複數好奇,可以試試 type(1+1j),看看是不是 complex 類型呢?順便提一下,Python 中的類型可不止這三個數字類型哦,事實上 Python 支持許許多多豐富的類型,而且可以自己定義;不過我們目前先了解數字,以後的課程中可樂會為大家介紹這些概念。

不同的數字類型之間可以互相轉換,例如 1 是一個整數,我們輸入 float(1),Python 就為我們轉換出來了一個浮點數 1.0;反過來,我們輸入 int(1.0),Python 為我們轉換出來一個整數 1,這裡要注意的事,浮點數轉換為整數是會損失小數部分的,例如我們試試 int(1.2),結果是 1,這顯然和原來的 1.2 不相等了。

好了,了解了不同類型的數字,我們再來看一看數字的表示方法。

我們常用的表示數字的方法稱作十進位表示法,它使用 0 到 9 十個基本數字來表示數字。例如 42,它的含義實際上是 4 乘以 10 的一次方加上 2 乘以 10 的零次方。這裡,高位數字代表的是基數 10 的 N 次方倍大小,4 就表示 40,2 就表示 2。在計算機的硬體里,只能存儲和使用 0 和 1,因此計算機世界裡的數字最終都會表示成 0 和 1 兩個基本數字的組合,這種表示方法就叫做二進位表示法。

和許多編程語言一樣,Python 默認使用十進位的數字表示方式,這樣你就可以用熟悉的數字系統來編寫程序了。不過有時候為了使用方便,你也可能用其他的進位表示數字,Python 支持的進位還有二進位、八進位和十六進位。我們再打開 Python Shell 來試一下:

輸入 0b101010,回車,顯示 42;再輸入 0o52,回車,顯示 42;再輸入 0x2a,回車,顯示還是 42。自上而下它們分別是 42 這個數字的二進位、八進位和十六進位表示法,實際上它們都是同一個數字,只是表示方法不同。二進位表示法前面總是以 0b 開頭,後面只能包含 0 和 1;八進位表示法總是以 0o 開頭,後面只能包含 0 到 7 八個數字;十六進位法則總是以 0x 開頭,後面包含 0 到 9,以及 a 到 f 總共十六個字元,其中 a 到 f 分別表示十進位數 10 到 15。

因為我們對十進位更為熟悉,所以經常把數字都換算成十進位,我們來簡單換算一下。十六進位數 0x2a,它的值為 2 乘以 16 的一次方加上 a 乘以 16 的零次方,也就是十進位 32 加上 10,等於十進位 42。同樣地,你可以算一下上面的兩個二進位和八進位數字。

在 Python 語言里,可以很方便的進行整數進位的轉換,Python 提供了幾個內置函數來實現這個功能。例如我們依次輸入 bin(42),回車,oct(42),回車,hex(42),回車。看看是不是得到了上面幾個 42 的不同表示法呢?這幾個函數的功能分別是把數字轉換成二進位,八進位和十六進位。同樣的,hex(0b101010) 也可以把二進位數轉換成十六進位表示法。雖然這些表示法看起來各不相同,要記得它們實際上都是同一個數字哦,使用起來沒有什麼不同的地方。

好了,接下來可樂再為大家介紹另一個概念,變數。在小學數學學習方程的時候大家就已經接觸過變數這個名字了,在 Python 的世界裡變數也是一個很簡單的概念,它實際上就是一個值的名字。變數不僅僅能表示數字類型的值,也能用於表示 其他的類型,不過在介紹到這些複雜的類型之前,我們先讓變數來表示數字吧。

例如,我們輸入 x = 1.0。這時我們就定義了一個變數 x,並且讓它的值為浮點數 1.0,回車。現在你只需要知道 x = 1.0 是一個所謂的賦值語句,Shell 只是默默地執行了這個語句,而並不輸出任何東西。這時我們可以通過輸入變數名來查看變數的值,輸入 x,回車,就能看到 x 的值已經是 1.0 了。

我們再試試 y = 0x2a,這時我們定義了一個變數 y,它的值為整數 42,只是在定義它的時候我們使用了十六進位來書寫這個數字。然後輸入 y,回車,可以看到確實 y 已經是整數 42 了。然後我們可以改變變數的值,例如這時我們輸入 x = 2.0,再輸入 x 回車,可以看到 x 已經變成了 2.0。

要使用一個變數,必須先定義它,也就是用變數名 = 數值的這種方式來定義,如果你沒有定義就嘗試使用一個變數,那麼 Python 就會報錯說名字未定義,例如我們輸入 z,回車,因為之前我們並沒有定義過變數 z,因此 Python Shell 告訴我們發生了一個 NameError,也就是這個變數名 z 還沒有被定義,現在不能使用。

你可以定義很多變數來使用,需要注意的是變數的名字必須符合一定的規則。在 Python 中,一個變數名必須只包含字母、數字和下劃線,並且不能以數字開頭,而且不能使用 Python 中內置的一些關鍵辭彙;此外,通常來說以下劃線開頭的變數名字都會有一些特殊的含義,所以可樂建議初學者先不要使用,以後可樂都會為大家一一介紹。牢記這個規則,我們可以看到 x, y, z,還有 counter, the_forty_two, a1, _type 都是合法的變數名字,而 0a, int, float, type 則不是合法的名字,因為 0a 以數字開頭,而後面三個則是 Python 的內置關鍵字。

可樂建議大家在取變數名的時候都遵循固定的規則,而且取有意義的名字,這樣會讓你的程序更加易懂。

變數也可以用內置函數 type() 來查看類型,例如我們輸入 type(x),可以看到 x 的類型就是它的值的類型,也就是 float;輸入 type(y),可以看到 y 是 int 類型。在 Python 中,變數的類型也是可以改變的,例如我們輸入 z = x,回車,然後輸入 z,回車,再輸入 type(z),回車,可以看到此時 z 和 x 一樣都是 float 類型,值為 2.0;然後我們輸入 z = y,回車,然後輸入 z,回車,type(z),回車,可以看到 z 的值變成了 42,而類型也變成了 int 類型。

好了,本節課的內容我們就先介紹到這裡。通過這節課的內容,我們了解了 Python 中的數字以及數字類型,並且知道了整數的二進位、八進位、十進位和十六進位幾種表示方法,此外,我們還了解了變數的概念。

在下一節課上,可樂會為大家介紹一下 Python 中的運算符號,學習了下一節課的內容之後,你就可以將 Python Shell 當作一個高級的計算器來使用了,敬請期待哦。

推薦閱讀:

【重磅】慕課網認證作者招募 | 打造個人品牌 so easy !
芬蘭大使到訪編程貓總部 夯實戰略合作基礎
Python3 基礎知識整理
史上最全的數控G代碼編程詳解—你收藏了嗎?
小工具有大用處,編程道路上從此少點煩惱

TAG:Python | 零基礎 | 編程 |