Python數(shù)字,類型轉(zhuǎn)換和數(shù)學(xué)詳解!

本文中,您將了解Python中使用的不同數(shù)字,如何從一種數(shù)據(jù)類型轉(zhuǎn)換為另一種數(shù)據(jù)類型以及Python支持的數(shù)學(xué)運(yùn)算。

Python中的數(shù)字?jǐn)?shù)據(jù)類型

Python支持整數(shù),浮點(diǎn)數(shù)和復(fù)數(shù)。它們?cè)赑ython中定義為int,float和complex類。

整數(shù)和浮點(diǎn)由存在或不存在小數(shù)點(diǎn)分隔。例如,5是整數(shù),而5.0是浮點(diǎn)數(shù)。

復(fù)數(shù)以形式書寫x + yj,其中 X 是最重要的部分 ? 是虛構(gòu)的部分。

我們可以使用type() 函數(shù)來(lái)了解變量或值屬于哪個(gè)類,并可以使用函數(shù)isinstance() 檢查它是否屬于特定類。

讓我們看一個(gè)例子:

a = 5

print(type(a)) 
print(type(5.0))

c = 5 + 3j
print(c + 3) 

print(isinstance(c, complex))

當(dāng)我們運(yùn)行上面的程序時(shí),我們得到以下輸出:

<class'int'>
<類'float'>
(8 + 3j)
真正

盡管整數(shù)可以是任意長(zhǎng)度,但浮點(diǎn)數(shù)最多只能精確到15個(gè)小數(shù)位(第16位不準(zhǔn)確)。

我們每天處理的數(shù)字是十進(jìn)制(以10為底)的數(shù)字系統(tǒng)。但是計(jì)算機(jī)程序員(通常是嵌入式程序員)需要使用二進(jìn)制(基數(shù)2),十六進(jìn)制(基數(shù)16)和八進(jìn)制(基數(shù)8)的數(shù)字系統(tǒng)。

在Python中,我們可以通過(guò)在數(shù)字之前添加前綴來(lái)表示這些數(shù)字。下表列出了這些前綴。

| 編號(hào)系統(tǒng) | 字首 |
| 二元 | ‘0b’或’0B’ |
| 八進(jìn)制 | '0o'或'0O' |
| 十六進(jìn)制 | ‘0x’或’0X’ |

這里有些例子

print(0b1101011) # Output: 253 (251 + 2)
print(0xFB + 0b10) # Output: 13
print(0o15)

運(yùn)行該程序時(shí),輸出為:

107
253
13

類型轉(zhuǎn)換

我們可以將一種數(shù)字轉(zhuǎn)換為另一種數(shù)字。這也稱為強(qiáng)制。

如果操作數(shù)之一為浮點(diǎn)型,則加法,減法等操作會(huì)強(qiáng)制整數(shù)隱式(自動(dòng))浮動(dòng)。

>>> 1 + 2.0
3.0

我們可以在上面看到1(整數(shù))被強(qiáng)制轉(zhuǎn)換為1.0(float)進(jìn)行加法運(yùn)算,結(jié)果也是一個(gè)浮點(diǎn)數(shù)。

我們還可以使用諸如的內(nèi)置函數(shù) int() ,float() 并complex()在類型之間進(jìn)行顯式轉(zhuǎn)換。這些函數(shù)甚至可以從字符串轉(zhuǎn)換。

不過(guò)只是知道基礎(chǔ)理論是不行的,還需要結(jié)合項(xiàng)目實(shí)戰(zhàn)案例來(lái)深刻理解,博主的Python學(xué)習(xí).交.流.扣.扣.裙:8衣久二五寺久寺二(數(shù)字的諧音轉(zhuǎn)換下可以找到了)內(nèi)已經(jīng)上傳了最新的企業(yè)項(xiàng)目實(shí)戰(zhàn)案例,有不懂的地方還可以和群友們一起討論,還能和來(lái)自BAT的大佬近距離交流學(xué)習(xí)。

>>> int(2.3) 2
>>> int(-2.8) -2
>>> float(5) 5.0
>>> complex('3+5j')
(3+5j)

從float轉(zhuǎn)換為整數(shù)時(shí),數(shù)字將被截?cái)啵ㄐ?shù)部分將被刪除)。

Python十進(jìn)制

Python內(nèi)置類float會(huì)執(zhí)行一些可能令我們驚訝的計(jì)算。我們都知道1.1和2.2的總和是3.3,但是Python似乎不同意。

>>> (1.1 + 2.2) == 3.3
False

到底是怎么回事?

事實(shí)證明,浮點(diǎn)數(shù)在計(jì)算機(jī)硬件中以二進(jìn)制分?jǐn)?shù)形式實(shí)現(xiàn),因?yàn)橛?jì)算機(jī)只能理解二進(jìn)制(0和1)。由于這個(gè)原因,我們知道的大多數(shù)十進(jìn)制小數(shù)不能準(zhǔn)確地存儲(chǔ)在我們的計(jì)算機(jī)中。

讓我們舉個(gè)例子。我們不能將分?jǐn)?shù)1/3表示為十進(jìn)制數(shù)。這將得到0.33333333 ...無(wú)限長(zhǎng),我們只能對(duì)其進(jìn)行近似。

事實(shí)證明,十進(jìn)制小數(shù)0.1會(huì)導(dǎo)致無(wú)限長(zhǎng)的二進(jìn)制分?jǐn)?shù)0.000110011001100110011 ...,而我們的計(jì)算機(jī)只存儲(chǔ)了有限數(shù)量的二進(jìn)制數(shù)。

這只會(huì)接近0.1,但永遠(yuǎn)不會(huì)相等。因此,這是我們計(jì)算機(jī)硬件的局限性,而不是Python中的錯(cuò)誤。

>>> 1.1 + 2.2
3.3000000000000003

為了克服這個(gè)問(wèn)題,我們可以使用Python隨附的十進(jìn)制模塊。浮點(diǎn)數(shù)的精度最高可以達(dá)到15個(gè)小數(shù)位,而十進(jìn)制模塊則具有用戶可設(shè)置的精度。

讓我們看一下區(qū)別:

import decimal
print(0.1) 
print(decimal.Decimal(0.1))

輸出量

0.1
0.1000000000000000055511151231257827021181583404541015625

當(dāng)我們要進(jìn)行學(xué)校學(xué)習(xí)的十進(jìn)制計(jì)算時(shí),使用此模塊。

它也保留了意義。我們知道25.50公斤比25.5公斤更準(zhǔn)確,因?yàn)樗葍晌恍?shù)兩位。

from decimal import Decimal as D 
print(D('1.1') + D('2.2')) 
print(D('1.2') * D('2.50'))

輸出量

3.3
3.000

注意上例中的尾隨零。

我們可能會(huì)問(wèn),為什么不Decimal每次都執(zhí)行而不是float?主要原因是效率。進(jìn)行浮點(diǎn)運(yùn)算必須比Decimal運(yùn)算更快。

什么時(shí)候使用Decimal而不是float?

在以下情況下,我們通常使用十進(jìn)制。

  • 當(dāng)我們進(jìn)行需要精確十進(jìn)制表示的金融應(yīng)用程序時(shí)。
  • 當(dāng)我們要控制所需的精度水平時(shí)。
  • 當(dāng)我們想實(shí)現(xiàn)小數(shù)位有效的概念時(shí)。

Python分?jǐn)?shù)

Python通過(guò)其fractions模塊提供涉及小數(shù)的運(yùn)算。

小數(shù)具有分子和分母,它們都是整數(shù)。該模塊支持有理數(shù)算法。

我們可以通過(guò)多種方式創(chuàng)建Fraction對(duì)象。讓我們看看它們。

import fractions 
print(fractions.Fraction(1.5)) 
print(fractions.Fraction(5)) 
print(fractions.Fraction(1,3))

輸出量

3/2
5
1/3

Fraction從中創(chuàng)建時(shí)float,我們可能會(huì)得到一些異常的結(jié)果。這是由于上一節(jié)中討論的二進(jìn)制浮點(diǎn)數(shù)表示不完美所致。

幸運(yùn)的是,還Fraction允許我們使用字符串實(shí)例化。使用十進(jìn)制數(shù)字時(shí),這是首選選項(xiàng)。

import fractions 

# As float 
# Output: 2476979795053773/2251799813685248
print(fractions.Fraction(1.1)) 

# As string 
# Output: 11/10
print(fractions.Fraction('1.1'))

輸出量

2476979795053773/2251799813685248
11/10

此數(shù)據(jù)類型支持所有基本操作。這里有一些例子。

from fractions import Fraction as F 
print(F(1, 3) + F(1, 3)) 
print(1 / F(5, 6)) 
print(F(-3, 10) > 0) 
print(F(-3, 10) < 0)

輸出量

2/3
6/5
假
真正

Python數(shù)學(xué)

Python提供了類似的模塊,==math==并==random==可以執(zhí)行不同的數(shù)學(xué)運(yùn)算,例如三角函數(shù),對(duì)數(shù),概率和統(tǒng)計(jì)等。

import math
print(math.pi)
print(math.cos(math.pi)) 
print(math.exp(10)) 
print(math.log10(1000)) 
print(math.sinh(1)) 
print(math.factorial(6))

輸出量

3.141592653589793
-1.0
22026.465794806718
3.0
1.1752011936438014
720

這是Python math模塊中可用的函數(shù)和屬性的完整列表。

import random 
print(random.randrange(10, 20))
x = ['a', 'b', 'c', 'd', 'e'] 

# Get random choice
print(random.choice(x)) 

# Shuffle x
random.shuffle(x)
 
# Print the shuffled x
print(x)
 
# Print random element
print(random.random())

運(yùn)行上面的程序時(shí),輸出如下(由于隨機(jī)行為,值可能會(huì)有所不同)

18 
?
['c','e','d','b','a'] 
0.5682821194654443

這是Python random模塊中可用的函數(shù)和屬性的完整列表。如果有朋友還有地方不了解的可以進(jìn)博主的Python學(xué)習(xí).交.流.扣.扣.裙:8衣久二五寺久寺二(數(shù)字的諧音轉(zhuǎn)換下可以找到了)下載最新的Python學(xué)習(xí)資料,進(jìn)行深層次的詳細(xì)學(xué)習(xí),有不懂的地方還可以和群內(nèi)的行業(yè)大佬討論學(xué)習(xí)


本文的文字及圖片來(lái)源于網(wǎng)絡(luò)加上自己的想法,僅供學(xué)習(xí)、交流使用,不具有任何商業(yè)用途,版權(quán)歸原作者所有,如有問(wèn)題請(qǐng)及時(shí)聯(lián)系我們以作處理。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容