Python從菜鳥到高手(5):數字

來源:互聯網
上載者:User
1 基礎知識

  Python語言與其他程式設計語言一樣,也支援四則運算(加、減、乘、除),以及圓括弧運算子。在Python語言中,數字分為整數和浮點數。整數就是無小數部分的數,浮點數就是有小數部分的數。例如,下面的代碼是標準的四則運算運算式。

2 + 44 * 5 + 205.3 / 7(30 + 2) * 12

  如果要計算兩個數的除法,不管分子和分母是整數還是浮點數,使用除法運算子(/)的計算結果都是浮點數。例如1/2的計算結果是0.5,2/2的計算結果是1.0。要想讓Python解譯器執行整除操作,可以使用整除運算子,也就是兩個斜杠(//)。使用整除運算子後,1 // 2的計算結果是0,2 // 2的結果是1。

  整除運算子不僅能對整數執行整除操作,也能對浮點數執行整除操作,在執行整除操作時,分子分母只要有一個是浮點數,那麼計算結果就是浮點數。例如,1.0 // 2的計算結果是0.0,2.0 // 2的結果是1.0。

  除了四則運算子外,Python還提供了兩個特殊的運算子:%(取餘運算子)和**(冪運算子)。取餘運算子用於對整數和浮點數執行取餘操作。例如,5 % 2的計算結果是1,而5.0 % 2的計算結果是1.0。從這一點可以看出,%和//類似,只要分子分母有一個是浮點數,計算結果就是浮點數。

  冪運算子用於計算一個數值的冪次方。例如,2 ** 3的計算結果是8,3.2 ** 2的計算結果是10.24。

  到現在為止,一共介紹了8個運算子,它們是圓括弧((…))加(+)、減(-)、乘(*)、除(/)、整除(//)、取餘(%)和冪運算子(**)。其中減號(-)也可以用於負號(一元運算子),所以現在涉及到9個運算子。既然涉及到這麼多運算子,那麼就有一個優先順序的問題,也就是說,同一個運算式中包含有多個不同的運算子,需要先計算優先順序高的運算子,如果優先順序相同個,那麼就按從左向右的順序執行。

  這9個運算子的優先順序順序如所示。越靠前優先順序越高,同一行的運算子的優先順序相同。

  下面的代碼示範了Python語言中運算子的使用方法,在編寫Python代碼時,應該注意運算子的優先順序問題。

print(2 + 4)                        #  運算結果:6print(126 - 654)                    #  運算結果:-528print(6 + 20 * 4)                   #  運算結果:86print((20 + 54) * 30)               #  運算結果:2220print(1/2)                          #  運算結果:0.5print(1//2)                     #  運算結果:0print(3/2)                          #  運算結果:1.5print(3//2)                     #  運算結果:1print(4**3)                     #  運算結果:64print(3 + 5 * -3 ** 4 - (-5)**2)    #  運算結果:-427#  用變數運算元值x = 30y = 50k = 10.2print(x + y * k)                    #  運算結果:540.0
2 大整數

  對於有符號32位整數來說,可表示的最大值是2147483647(2^31 -1),可表示的最小值是-2147483648(-2^31),如果超過這個範圍,有符號32位整數就會溢出。不過在Python語言中,可以處理非常大的整數,並不受位元限制。例如,下面運算式的輸出結果就超出了32位整數的範圍。

print(2 ** 35)      # 輸出2的35次冪,輸出結果是34359738368

  讓我們再換個更大的數,看看會不會溢出。

print(2**630  * 100000)     # 2的630次冪再乘10萬

  上面這行代碼的輸出結果如下:

445550841564667501820426914619169074696604346410992180720624269326101090547722401025968047980212050759633038044296328838934443820446820117016861457004122479321483854917994624031530682836582400000

  很顯然,Python語言仍然可以正確處理2**630 * 100000的計算結果。因此,在Python語言中使用數字不需要擔心溢出,因為Python語言可以處理非常大的數字,這也是為什麼很多人使用Python語言進行科學計算和資料分析的主要原因之一。

3. 二進位、八進位和十六進位

  Python語言可以表示二進位、八進位和十六進位數。表示這3個進位的數,必須以0開頭,然後分別跟著表示不同進位的字母。表示二進位的字母是b,表示八進位的字母是o(這是英文字母中小寫o,不要和數字0搞混了),表示十六進位的字母是x。因此,位元的正確寫法是0b110011,八位元的正確寫法是0o56432,十六進位數的正確寫法是0xF765A。

  除了這3種進位外,前面章節一直使用的是十進位。因此,Python語言一共可以表示4種進位:二進位、八進位、十進位和十六進位。Python語言提供了一些函數用於在這4種進位數之間進行轉換。

  如果是從其他進位轉換到十進位,需要使用int函數,該函數有兩個參數,含義如下:

• 第1個參數:字串類型,表示待轉換的二進位、八進位或十六進位數。參數值只需要指定帶轉換的數即可,不需要使用首碼,如二進位直接指定11011,不需要指定0b11011。

• 第2個參數:數實值型別,表示第1個參數值的進位,例如,如果要將二進位轉換為十進位,第2個參數值就是2。

  int函數返回一個數實值型別,表示轉換後的十進位數。

  下面的代碼將位元110011轉換為十進位數,並輸出返回結果。

print(int("110011",2))    // 輸出結果:51

  如果要從十進位轉換到其他進位,需要分別使用bin、oct和hex函數。bin函數用於將十進位數轉換為位元;oct函數用於將十進位數轉換為八位元,hex函數用於將十進位數轉換十六進位數。這3個函數都接收一個參數,就是待轉換的十進位數。不過要注意,這3個函數的參數值也可以是位元、八位元和十六進位數,也就是說,這3個函數可以在二進位、八進位、十進位和十六進位之間互轉。

  下面的代碼將十進位數54321轉換為十六進位數,並輸出轉換結果。

print(hex(54321))       # 輸出結果:0xd431

下面的代碼示範了Python語言中二進位、八進位、十進位和十六進位數之間的轉換。

print(0b110011)             # 輸出位元print(0o123)                    # 輸出八位元print(0xF15)                    # 輸出十六進位數print(bin(12))                  # 十進位轉二進位,輸出結果:0b1100print(int("10110",2))           # 二進位轉十進位,輸出結果:22print(int("0xF35AE",16))        # 十六進位轉十進位,輸出結果:996782print(hex(54321))               # 十進位轉十六進位,輸出結果:0xd431print(bin(0xF012E))         # 十六進位轉二進位,輸出結果:0b11110000000100101110print(hex(0b1101101))           # 二進位轉十六進位,輸出結果:0x6dprint(oct(1234))                # 十進位轉八進位,輸出結果:0o2322print(int("76532", 8))          # 八進位轉十進位,輸出結果:32090

程式運行結果如所示。

《Python從菜鳥到高手》開始了,敬請關注

4 數位格式化輸出

  在輸出數字時,有時需要對其進行格式化。例如,在輸出12.34時,只希望保留小數點後1位元字,也就是12.3,或整數位按6位輸出,不足前面補0,也就是000012.34。Python語言中提供了format函數用於對數字進行格式化。format函數有兩個參數,含義如下:

• 第1個參數:要格式化的數字。

• 第2個參數:格式字串。

  format函數的傳回值就是數字格式化後的字串。

  下面的代碼示範了format函數在格式化數字方面的應用。

x = 1234.56789# 小數點後保留兩位元,輸出結果:'1234.57'print(format(x, '0.2f'))      # 數字在12個字元長度的地區內靠右對齊,並保留小數點後1位元字,# 輸出結果:'      1234.6'      print(format(x, '>12.1f'))          # 數字在12個字元長度的地區內靠左對齊,並保留小數點後3位元字,緊接著輸出20,# 輸出結果:'1234.568     20'print(format(x, '<12.3f'), 20)# 數字在12個字元長度的地區內靠右對齊,並保留小數點後1位元字,數字前面補0,# 輸出結果:'0000001234.6'print(format(x, '0>12.1f'))# 數字在12個字元長度的地區內靠左對齊,並保留小數點後1位元字,數字後面補0,# 輸出結果:'1234.6000000'print(format(x, '0<12.1f'))# 數字在12個字元長度的地區內中心對齊,並保留小數點後2位元字,緊接著輸出3,# 輸出結果:'   1234.57   3'print(format(x, '^12.2f'),3)# 每千位用逗號(,)分隔,輸出結果:1,234.56789print(format(x, ','))# 每千位用逗號(,)分隔,並保留小數點後2位元字,輸出結果:1,234.57print(format(x, ',.2f'))# 用科學計數法形式輸出數字,輸出結果:1.234568e+03print(format(x, 'e'))# 用科學計數法形式輸出數字,尾數保留小數點後2位元字,輸出結果:1.23E+03print(format(x, '0.2E'))

程式運行結果如所示。

《Python從菜鳥到高手》已經出版,開始連載了,購買送視頻課程

相關文章

Alibaba Cloud 10 Year Anniversary

With You, We are Shaping a Digital World, 2009-2019

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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