Python - 數字



Python 內建支援儲存和處理數值資料(Python 數字)。在幾乎所有Python 應用中,你都會用到數字。顯然,任何計算機應用程式都處理數字。本教程將討論不同型別的 Python 數字及其屬性。

Python - 數字型別

Python 提供三種內建的數字型別

  • 整數 (int)
  • 浮點數 (float)
  • 複數

Python 還具有名為 bool 的內建布林資料型別。它可以被視為 int 型別的子型別,因為它的兩個可能值 TrueFalse 分別表示整數 1 和 0。

Python − 整數

在 Python 中,任何沒有小數部分的數字都是整數。(請注意,如果數字的小數部分為 0,並不意味著它是一個整數。例如,數字 10.0 不是整數,它是一個小數部分為 0 的浮點數,其數值為 10。)整數可以是零、正數或負整數。例如,1234、0、-55 都表示 Python 中的整數。

有三種方法可以形成整數物件:(a) 字面量表示,(b) 任何計算結果為整數的表示式,以及 (c) 使用 int() 函式。

字面量是在原始碼中直接表示常量的表示法。例如:

>>> a =10

但是,請看以下整數變數 *c* 的賦值。

a = 10
b = 20
c = a + b

print ("a:", a, "type:", type(a))
print ("c:", c, "type:", type(c))

它將產生以下輸出

a: 10 type: <class 'int'>
c: 30 type: <class 'int'>

這裡,*c* 的確是一個整數變數,但是首先計算表示式 *a + b*,然後間接地將其值賦給 *c*。

形成整數物件的第三種方法是使用 int() 函式的返回值。它將浮點數或字串轉換為整數。

>>> a=int(10.5)
>>> b=int("100")

你可以將整數表示為二進位制、八進位制或十六進位制數。但是,物件在內部儲存為整數。

Python 中的二進位制數

僅由二進位制數字(1 和 0)組成並以 "0b" 為字首的數字是二進位制數。如果將二進位制數賦給變數,它仍然是一個 int 變數。

要表示二進位制形式的整數,可以直接將其儲存為字面量,或使用 int() 函式,其中基數設定為 2

a=0b101
print ("a:",a, "type:",type(a))

b=int("0b101011", 2)
print ("b:",b, "type:",type(b))

它將產生以下輸出

a: 5 type: <class 'int'>
b: 43 type: <class 'int'>

Python 中還有一個 bin() 函式。它返回整數的二進位制字串等效項。

a=43
b=bin(a)
print ("Integer:",a, "Binary equivalent:",b)

它將產生以下輸出

Integer: 43 Binary equivalent: 0b101011

Python 中的八進位制數

八進位制數僅由 0 到 7 的數字組成。為了指定整數使用八進位制表示法,它需要以 "0o"(小寫 O)或 "0O"(大寫 O)為字首。八進位制數的字面量表示如下:

a=0O107
print (a, type(a))

它將產生以下輸出

71 <class 'int'>

請注意,該物件在內部儲存為整數。八進位制數 107 的十進位制等效值為 71。

由於八進位制數系統有8個符號(0到7),其基數為8。因此,在使用int()函式將八進位制字串轉換為整數時,需要將base引數設定為8。

a=int('20',8)
print (a, type(a))

它將產生以下輸出

16 <class 'int'>

八進位制數30的十進位制等價值為16。

在下面的程式碼中,從八進位制表示法獲得兩個int物件,並執行它們的加法運算。

a=0O56
print ("a:",a, "type:",type(a))

b=int("0O31",8)
print ("b:",b, "type:",type(b))

c=a+b
print ("addition:", c)

它將產生以下輸出

a: 46 type: <class 'int'>
b: 25 type: <class 'int'>
addition: 71

要獲得整數的八進位制字串,請使用oct()函式。

a=oct(71)
print (a, type(a))

Python中的十六進位制數

顧名思義,十六進位制數系統有16個符號。它們是0-9和A到F。前10位數字與十進位制數字相同。字母A、B、C、D、E和F分別相當於11、12、13、14、15和16。這些字母符號可以使用大寫或小寫。

對於十六進位制表示的整數的字面量表示,請在其前面加上"0x""0X"

a=0XA2
print (a, type(a))

它將產生以下輸出

162 <class 'int'>

要將十六進位制字串轉換為整數,請在int()函式中將base設定為16。

a=int('0X1e', 16)
print (a, type(a))

嘗試執行以下程式碼片段。它接收一個十六進位制字串,並返回整數。

num_string = "A1"
number = int(num_string, 16)
print ("Hexadecimal:", num_string, "Integer:",number)

它將產生以下輸出

Hexadecimal: A1 Integer: 161

但是,如果字串包含任何十六進位制符號表以外的符號,則會生成錯誤。

num_string = "A1X001"
print (int(num_string, 16))

上述程式生成以下錯誤:

Traceback (most recent call last):
  File "/home/main.py", line 2, in 
    print (int(num_string, 16))
ValueError: invalid literal for int() with base 16: 'A1X001'

Python的標準庫具有hex()函式,可以使用該函式獲得整數的十六進位制等價值。

a=hex(161)
print (a, type(a))

它將產生以下輸出

0xa1 <class 'str'>

雖然整數可以表示為二進位制、八進位制或十六進位制,但內部它仍然是整數。因此,在執行算術運算時,表示方式無關緊要。

a=10 #decimal
b=0b10 #binary
c=0O10 #octal
d=0XA #Hexadecimal
e=a+b+c+d

print ("addition:", e)

它將產生以下輸出

addition: 30

Python - 浮點數

浮點數具有整數部分和小數部分,由小數點符號(.)分隔。預設情況下,數字為正數,負數前面加一個減號(-)符號。

浮點數是Python的float類的物件。要儲存float物件,可以使用字面量表示法、使用算術表示式的值或使用float()函式的返回值。

使用字面量是最直接的方法。只需將帶有小數部分的數字賦值給變數。以下每個語句都宣告一個float物件。

>>> a=9.99
>>> b=0.999
>>> c=-9.99
>>> d=-0.999

在Python中,對浮點數的小數點後可以有多少位數字沒有限制。但是,為了縮短表示,使用Ee符號。E代表10的冪。例如,E4是10的4次冪(或10的4次方),e-3是10的-3次冪。

在科學計數法中,數字具有係數和指數部分。係數應為大於或等於1但小於10的浮點數。因此,1.23E+3、9.9E-5和1E10是帶有科學計數法的浮點數的示例。

>>> a=1E10
>>> a
10000000000.0
>>> b=9.90E-5
>>> b
9.9e-05
>>> 1.23E3
1230.0

形成浮點數物件的第二種方法是間接的,使用表示式的結果。在這裡,兩個浮點數的商被賦值給一個變數,該變數引用一個浮點數物件。

a=10.33
b=2.66
c=a/b

print ("c:", c, "type", type(c))

它將產生以下輸出

c: 3.8834586466165413 type <class 'float'>

Python的float()函式返回一個float物件,如果其內容合適,則解析數字或字串。如果括號中沒有給出引數,則返回0.0,對於int引數,則新增值為0的小數部分。

>>> a=float()
>>> a
0.0
>>> a=float(10)
>>> a
10.0

即使整數以二進位制、八進位制或十六進位制表示,float()函式也會返回小數部分為0的浮點數。

a=float(0b10)
b=float(0O10)
c=float(0xA)

print (a,b,c, sep=",")

它將產生以下輸出

2.0,8.0,10.0

float()函式從包含浮點數的字串中檢索浮點數,該浮點數可以採用標準小數點格式,也可以採用科學計數法。

a=float("-123.54")
b=float("1.23E04")
print ("a=",a,"b=",b)

它將產生以下輸出

a= -123.54 b= 12300.0

在數學中,無窮大是一個抽象概念。從物理上講,無限大的數字永遠無法儲存在任何數量的記憶體中。但是,對於大多數計算機硬體配置,10的400次冪的非常大的數字由Inf表示。如果使用"Infinity"作為float()函式的引數,則返回Inf。

a=1.00E400
print (a, type(a))
a=float("Infinity")
print (a, type(a))

它將產生以下輸出

inf <class 'float'>
inf <class 'float'>

另一個這樣的實體是Nan(代表非數字)。它表示任何未定義或不可表示的值。

>>> a=float('Nan')
>>> a
Nan

Python - 複數

在本節中,我們將詳細瞭解Python中的複數資料型別。複數在電磁學、電子學、光學和量子理論的數學方程式和定律中得到應用。傅立葉變換使用複數。它們用於帶有波函式的計算、設計過濾器、數位電子中的訊號完整性、射電天文學等。

複數由實部和虛部分組成,用"+"或"-"分隔。實部可以是任何浮點數(或它本身是一個複數)。虛部也是浮點數/複數,但乘以虛數。

在數學中,虛數"i"定義為-1的平方根($\sqrt{−1}$)。因此,複數表示為"x+yi",其中x是實部,"y"是虛部的係數。

通常,為了避免與在電力理論中將其用作電流混淆,使用符號"j"代替"i"表示虛數。Python也使用"j"作為虛數。因此,"x+yj"是Python中複數的表示。

與int或float資料型別一樣,可以使用字面量表示法或使用complex()函式來形成複數物件。以下所有語句都形成一個複數物件。

>>> a=5+6j
>>> a
(5+6j)
>>> type(a)
<class 'complex'>
>>> a=2.25-1.2J
>>> a
(2.25-1.2j)
>>> type(a)
<class 'complex'>
>>> a=1.01E-2+2.2e3j
>>> a
(0.0101+2200j)
>>> type(a)
<class 'complex'>

請注意,實部以及虛部的係數必須是浮點數,它們可以用標準小數點表示法或科學計數法表示。

Python的complex()函式有助於形成複數型別的物件。該函式接收實部和虛部的引數,並返回複數。

complex()函式有兩個版本,帶兩個引數和帶一個引數。使用帶兩個引數的complex()很簡單。它使用第一個引數作為實部,第二個引數作為虛部的係數。

a=complex(5.3,6)
b=complex(1.01E-2, 2.2E3)
print ("a:", a, "type:", type(a))
print ("b:", b, "type:", type(b))

它將產生以下輸出

a: (5.3+6j) type: <class 'complex'>
b: (0.0101+2200j) type: <class 'complex'>

在上面的示例中,我們使用x和y作為浮點引數。它們甚至可以是複數資料型別。

a=complex(1+2j, 2-3j)
print (a, type(a))

它將產生以下輸出

(4+4j) <class 'complex'>

對上面的例子感到驚訝嗎?將"x"設為1+2j,將"y"設為2-3j。嘗試手動計算"x+yj",你就會明白了。

complex(1+2j, 2-3j)
=(1+2j)+(2-3j)*j
=1+2j +2j+3
=4+4j

如果只為complex()函式使用一個數值引數,則將其視為實部的值;虛部設定為0。

a=complex(5.3)
print ("a:", a, "type:", type(a))

它將產生以下輸出

a: (5.3+0j) type: <class 'complex'>

如果complex()函式的唯一引數是具有複數表示的字串,則它也可以將字串解析為複數。

在下面的程式碼片段中,要求使用者輸入一個複數。它用作引數。由於Python將輸入讀取為字串,因此該函式從中提取複數物件。

a= "5.5+2.3j"
b=complex(a)
print ("Complex number:", b)

它將產生以下輸出

Complex number: (5.5+2.3j)

Python的內建complex類有兩個屬性realimag - 它們從物件中返回實部和虛部的係數。

a=5+6j
print ("Real part:", a.real, "Coefficient of Imaginary part:", a.imag)

它將產生以下輸出

Real part: 5.0 Coefficient of Imaginary part: 6.0

complex類還定義了一個conjugate()方法。它返回另一個複數,其虛數部分的符號相反。例如,x+yj的共軛是x-yj。

>>> a=5-2.2j
>>> a.conjugate()
(5+2.2j)

數字型別轉換

Python在包含混合型別的表示式中內部將數字轉換為公共型別以進行計算。但有時,你需要顯式地將數字從一種型別強制轉換為另一種型別,以滿足運算子或函式引數的要求。

  • 使用int(x)將x轉換為普通整數。

  • 使用long(x)將x轉換為長整數。

  • 使用float(x)將x轉換為浮點數。

  • 使用complex(x)將x轉換為實部為x、虛部為零的複數。同樣,使用complex(x, y)將x和y轉換為實部為x、虛部為y的複數。x和y是數值表示式。

讓我們看看各種與數字和數學相關的函式。

理論函式和表示函式

Python在math模組中包含以下理論函式和表示函式:

序號 函式及說明
1

math.ceil(x)

x的上限:不大於x的最小整數

2 math.comb(n,k)

此函式用於查詢從y個專案中選擇x個專案的方法數,不重複且無順序。

3

math.copysign(x, y)

此函式返回一個浮點數,其大小(絕對值)為x,但符號為y。

4

math.cmp(x, y)

此函式用於比較兩個物件的數值。此函式在Python3中已棄用。

5

math.fabs(x)

此函式用於計算給定整數的絕對值。

6

math.factorial(n)

此函式用於查詢給定整數的階乘。

7

math.floor(x)

此函式計算給定整數的向下取整值。

8

math.fmod(x, y)

math模組中的fmod()函式返回與"%"運算子相同的結果。但是,fmod()給出的模除結果比模運算子更準確。

9

math.frexp(x)

此函式用於計算給定數字的尾數和指數。

10

math.fsum(iterable)

此函式返回iterable(即列表、元組、陣列)中所有數值項的浮點和。

11

math.gcd(*integers)

此函式用於計算所有給定整數的最大公約數。

12

math.isclose()

此函式用於確定兩個給定的數值是否彼此接近。

13

math.isfinite(x)

此函式用於確定給定數字是否是有限數字。

14

math.isinf(x)

此函式用於確定給定值是否為無窮大(正或負)。

15

math.isnan(x)

此函式用於確定給定數字是否為"NaN"。

16

math.isqrt(n)

此函式計算給定非負整數的整數平方根。

17

math.lcm(*integers)

此函式用於計算給定整數引數的最小公倍數。

18

math.ldexp(x, i)

此函式返回第一個數字與第二個數字指數的乘積。因此,ldexp(x,y)返回x*2**y。這是frexp()函式的反函式。

19

math.modf(x)

這將x的小數部分和整數部分返回為一個包含兩項的元組。

20

math.nextafter(x, y, steps)

此函式返回x之後朝向y的下一個浮點值。

21

math.perm(n, k)

此函式用於計算排列。它返回從y個專案中選擇x個專案的方法數,不重複且按順序排列。

22

math.prod(iterable, *, start)

此函式用於計算作為引數給出的iterable(列表、元組)中所有數值項的乘積。

23

math.remainder(x,y)

此函式返回關於y的x的餘數。這是x − n*y的差,其中n是最接近商x / y的整數。

24

math.trunc(x)

此函式返回數字的整數部分,去除小數部分。對於正x,trunc()等效於floor(),對於負x,等效於ceil()。

25

math.ulp(x)

此函式返回浮點數x的最低有效位的數值。對於正x,trunc()等效於floor(),對於負x,等效於ceil()。

冪函式和對數函式

序號 函式及說明
1

math.cbrt(x)

此函式用於計算一個數的立方根。

2

math.exp(x)

此函式計算x的指數:ex

3

math.exp2(x)

此函式返回2的x次冪。它等效於2**x。

4

math.expm1(x)

此函式返回e的x次冪減1。這裡e是自然對數的底數。

5

math.log(x)

此函式計算x的自然對數,對於x>0。

6

math.log1p(x)

此函式返回1+x的自然對數(底數e)。結果的計算方式對於接近零的x是準確的。

7

math.log2(x)

此函式返回x的以2為底的對數。這通常比log(x, 2)更準確。

8

math.log10(x)

x的以10為底的對數,對於x>0。

9

math.pow(x, y)

x 的 y 次冪。

10

math.sqrt(x)

x 的平方根 (x > 0)

三角函式

Python 的 math 模組包含以下執行三角計算的函式:

序號 函式及說明
1

math.acos(x)

此函式返回 x 的反餘弦值(以弧度表示)。

2

math.asin(x)

此函式返回 x 的反正弦值(以弧度表示)。

3

math.atan(x)

此函式返回 x 的反正切值(以弧度表示)。

4

math.atan2(y, x)

此函式返回 atan(y / x)(以弧度表示)。

5

math.cos(x)

此函式返回 x 弧度的餘弦值。

6

math.sin(x)

此函式返回 x 弧度的正弦值。

7

math.tan(x)

此函式返回 x 弧度的正切值。

8

math.hypot(x, y)

此函式返回歐幾里德範數,sqrt(x*x + y*y)。

角度轉換函式

以下是 Python math 模組提供的角度轉換函式:

序號 函式及說明
1

math.degrees(x)

此函式將給定的角度從弧度轉換為度數。

2

math.radians(x)

此函式將給定的角度從度數轉換為弧度。

數學常數

Python 的 math 模組定義了以下數學常數:

序號 常數和描述
1

math.pi

表示數學常數 π,其值為 "3.141592..."(精確到可用精度)。

2

math.e

表示數學常數 e,其值為 "2.718281..."(精確到可用精度)。

3

math.tau

表示數學常數 Tau (τ)。它等於圓周與半徑之比,等於

4

math.inf

表示正無窮大。負無窮大使用 "−math.inf"

5

math.nan

此常數是一個浮點數“非數字”(NaN)值。其值等效於 float('nan') 的輸出。

雙曲函式

雙曲函式是基於雙曲線而不是圓的三角函式的類似物。以下是 Python math 模組的雙曲函式:

序號 函式及說明
1

math.acosh(x)

此函式用於計算給定值的反雙曲餘弦。

2

math.asinh(x)

此函式用於計算給定數字的反雙曲正弦。

3

math.atanh(x)

此函式用於計算數字的反雙曲正切。

4

math.cosh(x)

此函式用於計算給定值的雙曲餘弦。

5

math.sinh(x)

此函式用於計算給定數字的雙曲正弦。

6

math.tanh(x)

此函式用於計算數字的雙曲正切。

特殊函式

以下是 Python math 模組提供的特殊函式:

序號 函式及說明

1

math.erf(x)

此函式返回給定引數的高斯誤差函式的值。

2

math.erfc(x)

此函式是誤差函式的互補函式。erf(x) 的值等於 1-erf(x)

3

math.gamma(x)

此函式用於計算複數的階乘。它被定義為除非正整數之外的所有複數。

4

math.lgamma(x)

此函式用於計算 x 處伽馬函式絕對值的自然對數。

隨機數函式

隨機數用於遊戲、模擬、測試、安全和隱私應用程式。Python 的 random 模組包含以下函式。

序號 函式及說明
1

random.choice(seq)

來自列表、元組或字串的隨機項。

2

random.randrange([start,] stop [,step])

從 range(start, stop, step) 中隨機選擇的元素。

3

random.random()

一個隨機浮點數 r,使得 0 <= r < 1。

4

random.seed([x])

此函式設定用於生成隨機數的整數起始值。在呼叫任何其他 random 模組函式之前呼叫此函式。返回 None。

5

random.shuffle(seq)

此函式用於隨機化給定序列的專案。

6

random.uniform(a, b)

此函式返回一個隨機浮點值 r,使得 a <= r < b。

內建數學函式

以下數學函式內置於 Python 直譯器 中,因此您無需從任何模組匯入它們。

序號 函式及說明

1

Python abs() 函式

abs() 函式返回 x 的絕對值,即 x 與零之間的正距離。

2

Python max() 函式

max() 函式返回其引數中最大的一個,或來自可迭代物件(列表或元組)的最大數字。

3

Python min() 函式

min() 函式返回其引數中最小的一個,即最接近負無窮大的值,或來自可迭代物件(列表或元組)的最小數字。

4

Python pow() 函式

pow() 函式返回 x 的 y 次冪。它等效於 x**y。

5

Python round() 函式

round() 是 Python 中的內建函式。它返回四捨五入到小數點後 n 位的 x。

6

Python sum() 函式

sum() 函式返回任何可迭代物件(列表或元組)中所有數字項的總和。它有一個可選的 start 引數,預設為 0。如果給出,列表中的數字將新增到 start 值。

廣告