Python數據類型——數值型詳解

上一篇文章:Python的變量和數據類型

用Python畫的滑稽臉


 這是我之前用Python的turtle庫畫的一個滑稽臉的視頻,如果想要源碼的話可以看我之前的博客:如何用Python畫QQ表情中的滑稽臉。拿走別忘了點個贊哈,感謝大家的支持。


 寫在前面:大家好!我是ACfun,我的暱稱來自兩個單詞Acceptedfun。由於最近在學習python,學了一遍感覺不是特別條理,所以我想整理一個有關python基礎的系列的文章。希望自己通過這次的整理可以對python有一個較爲清晰的理解和認識。如果有不足或者的錯誤的地方歡迎在評論區或者私信我指正,感謝大家的不吝賜教。我的唯一博客更新地址是:https://ac-fun.blog.csdn.net/。非常感謝大家的支持。
用知識改變命運,用知識成就未來。加油 (ง •̀o•́)ง (ง •̀o•́)ง

本篇簡介

 上一篇博客:Python的變量和數據類型 簡單的寫了一下Python中的數據類型有哪些,本篇我們來詳細的學習一下Python中的數據類型以及其應用字符串除外,字符串會在後面的博客中做專門的學習整理)。

基本類型:數值型

整數類型:int

Python3中的整數最大的特點就是“不限制大小”。在上一篇博客中也寫到:在Python2中支持的long,在Python3中不再支持。在Python 3裏,只有一種整數類型 int,表示爲長整型。。那麼這個int在Python中所表示的範圍到底能有多大呢?給出的解釋是:Python 長整數僅受限於用戶計算機的虛擬內存總數。
 基本可以這麼說:Python3的int長度理論上是無限的。所以在Python你不必像在C語言或者java中一樣考慮我是用int還是long還是long long等等。在Python3中我們只需要計算就可以了。比如我們計算一下2的100次方等於多少:

>>> 2**100
1267650600228229401496703205376

我們直接在Python自帶的IDLE中輸入2**100即可計算出結果,如果我們是使用的C語言無論是使用long型還是long long型,肯定會出現數據溢出的情況。因爲在C語言中:

long型所表示的範圍爲:-2147483648 ~ +2147483647 (4 Bytes)
long long所表示的範圍爲:-9223372036854775808 ~ +9223372036854775807 (8 Bytes)

通過這個例子,我們直接就體會到了Python對於大數的處理的方便性。在Python中無論多複雜的算式都可以直接的出結果。

常見的運算

 整數中常見的運算我們在上一篇博客:Python的變量和數據類型數值運算部分已經寫過了,這裏我們再補充一下:

  • 我們還可以使用divmod()這一內置函數直接求整數除法和餘數。例如我們求divmod(m,n):使用這個方法會得到兩個整數,一個是m // n,另一個是m % n。
  • m ** n 求乘方,即整數m的n次方,上面的2 ** 100就是2的100次方。
  • abs(m) 求m的絕對值
  • bin(m) 將數值m轉換爲二進制數,例如:
>>> x = 10
>>> x
10
>>> bin(x)
'0b1010'
  • oct(x) 將數值x轉換爲八進制,例如:
>>> n = 0b1001
>>> oct(n)
'0o11'
  • hex(x) 將數值x轉換爲十六進制,例如:
>>> x = 0o11
>>> x
9
>>> hex(x)
'0x9'

直接輸出x,Python默認將該數值轉換爲10進制輸出


其他常用的數學運算函數

常用的數學函數

隨機數函數

&Python3中的隨機數函數用於生成隨機數,比如我們要寫一個猜數字的遊戲就需要用到隨機數,或者是當我們寫一個遊戲需要使用到隨機數時(比如大富翁遊戲的擲骰子)等等。常見的隨機數的生成函數有以下幾種:
隨機數生成函數
例如:

# 生成10個隨機數
>>> import random
>>> for i in range(10):
	print(random.randint(0,100))
	
97
2
40
28
86
25
67
69
91
58

關於生成隨機數這一部分後面還會詳細整理。這裏只做一個簡單的介紹,在後面的博客中我會寫一個猜數字的小遊戲,到時候我們在詳細的學習如何生成隨機數。


大小比較

 在Python中我們也可以對數值的大小進行比較。我們可以使用比較運算符來進行兩個數的比較:
比較
在Python中我們還可以進行連續的比較,比如:

>>> 7 > 3 >= 2
True
>>> 7 < 3 >= 0
False

我們會發現和上面表中的一樣,如果表達式正確,那麼會返回True,錯誤則會返回False。我們可以用這個來控制循環,比如滿足條件就繼續循環,不滿足就結束循環,這個在以後的博客中也會詳細的說明。


數的進制

 在常見運算中也寫到了關於進制轉換的內置函數,Python中同樣也有二進制、八進制、十進制、十六進制。

  • 在Python中二進制(binary)以前綴0b或者0B開頭,注意這裏的是阿拉伯數字0而不是字母o,千萬不要輸錯了。使用bin()函數來返回對應數值的二進制。比如:
>>> x = 0b1111
>>> x
15
>>> bin(x)
'0b1111'
>>> x = 0B1101
>>> x
13
>>> bin(13)
'0b1101'
  • 八進制(octal)以前綴0o或者0O開頭,同樣也要注意是阿拉伯數字0和字母o | O,要注意區分。使用oct()函數返回相應數值的八進制。
  • 十進制無前綴數字,使用int()即可將其他進制轉換爲十進制。
  • 十六進制(hexadecimal)以前綴0x或者0X開頭,使用hex()函數將其他數值轉換爲十六進制。

浮點數類型:float

 浮點數的操作與上面的整數操作類似。但是浮點數受到17位有效數字的限制,浮點數一般只有17位有效數字,如果超過17位那麼就要使用科學計數法來表示

浮點數的特性

 由於浮點數在計算機中是以二進制來表示的,所以有些時候浮點數在轉換以及運算過程中難免會產生一些誤差。所以有的時候我們會發現一些匪夷所思的錯誤。比如我們計算一下2.1+4.2結果肯定爲6.3呀,但是如果我們在IDLE中計算一下,卻發現結果爲6.300000000000001,比較的結果是False。

>>> 2.1 + 4.2
6.300000000000001
>>> 2.1 + 4.2 == 6.3
False

爲什麼會這樣呢???其實就是因爲在計算機進行進制轉換的時候產生了微小的誤差。
 所以我們用到浮點數的時候,當我們進行比較的時候最好不要用 ==來比較。而是將它們做差,如果他們之間的差小於一個很小很小的數,我們就認爲這兩個浮點數相等。


複數類型

 Python中內置了複數類型。Python可以支持所有有關複數的常見運算。比如加、減、乘、除、乘方等等。我們可以使用.real來取出複數的實部,使用.imag取出複數的虛部。
 複數的表示在數學中是a+bi,但是在實際編程中因爲i與阿拉伯數字1太接近了,不好區分,所以在Python中用j代表i,即a+bj

複數的比較

 複數之間只能比較是否相等,不能比較大小。這也是數學上的真理,所以在Python中的複數也只能比較兩個複數是否相等,不能比較大小。

複數的應用

 求平面上兩個點(x1,x2)和(y1,y2)之間的距離。

>>> abs((4+3j)+(1+6j))
10.295630140987
>>> abs(1+1j)
1.4142135623730951

更多的數學函數

 Python中不止有上面提到的數學函數,還有很多其他的函數。Python 中數學運算常用的函數基本都在 math 模塊、cmath 模塊中

  • Python math 模塊提供了許多對浮點數的數學運算函數。
  • Python cmath 模塊包含了一些用於複數運算的函數。

cmath 模塊的函數跟 math 模塊函數基本一致,區別是 cmath 模塊運算的是複數,math 模塊運算的是數學運算

 使用math或者cmath函數必須先導入。使用import math導入math模塊,使用import cmath導入cmath模塊。

math模塊中包含的函數

 我們可以使用dir()函數顯示出我們導入模塊所包含的內容:

>>> import math
>>> dir(math)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']

其中包含的函數這裏就不再詳細的解釋了,如果想知道某一個函數的使用方法,直接百度即可。


cmath模塊中包含的函數

>>> import cmath
>>> dir(cmath)
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'cos', 'cosh', 'e', 'exp', 'inf', 'infj', 'isclose', 'isfinite', 'isinf', 'isnan', 'log', 'log10', 'nan', 'nanj', 'phase', 'pi', 'polar', 'rect', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau']

參考資料:


未完待續,持續更新中……
學習!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章