Python 基礎(chǔ)教程

Python 流程控制

Python 函數(shù)

Python 數(shù)據(jù)類型

Python 文件操作

Python 對象和類

Python 日期和時(shí)間

Python 高級知識

Python 參考手冊

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

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

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

Python支持整數(shù),浮點(diǎn)數(shù)和復(fù)數(shù)。他們被定義為int,float和complex在Python數(shù)據(jù)類型中。

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

復(fù)數(shù)以形式書寫x + yj,其中x是實(shí)部,y是虛部。

我們可以使用type()函數(shù)來判斷變量或值屬于哪種數(shù)據(jù)類型,并且可以使用函數(shù)isinstance()檢查它是否屬于特定的類型。

a = 5

# 輸出: <class 'int'>
print(type(a))

# 輸出: <class 'float'>
print(type(5.0))

# 輸出: (8+3j)
c = 5 + 3j
print(c + 3)

# 輸出: True
print(isinstance(c, complex))

雖然整數(shù)可以是任意長度,但浮點(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中,我們可以通過在數(shù)字之前添加前綴來表示這些數(shù)字。下表列出了這些前綴。

Python數(shù)字的數(shù)字系統(tǒng)前綴
編號系統(tǒng)前綴
Binary'0b'或'0B'
Octal'0o'或'0O'
Hexadecimal'0x'或'0X'

這里有些示例

# 輸出: 107
print(0b1101011)

# 輸出: 253 (251 + 2)
print(0xFB + 0b10)

# 輸出: 13
print(0o15)

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

107
253
13

數(shù)據(jù)類型轉(zhuǎn)換

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

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

>>> 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)換。

>>> 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 小數(shù)

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 ...無限長,我們只能對其進(jìn)行近似。

原來的十進(jìn)制小數(shù)0.1會(huì)導(dǎo)致無限長的二進(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è)問題,我們可以使用Python隨附的十進(jìn)制模塊。浮點(diǎn)數(shù)的精度最高可以達(dá)到15個(gè)小數(shù)位,而十進(jìn)制模塊具有用戶可設(shè)置的精度。

import decimal

# 輸出: 0.1
print(0.1)

# 輸出: Decimal('0.1000000000000000055511151231257827021181583404541015625')
print(decimal.Decimal(0.1))

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

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

from decimal import Decimal as D
# 輸出: Decimal('3.3')
print(D('1.1') + D('2.2'))

# 輸出: Decimal('3.000')
print(D('1.2') * D('2.50'))

注意上例中的尾隨零。

我們可能會(huì)問,為什么不每次都執(zhí)行Decimal而不是float?主要原因是效率。進(jìn)行浮點(diǎn)運(yùn)算必須比十進(jìn)制運(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í)。

  • 當(dāng)我們希望像在學(xué)校一樣進(jìn)行運(yùn)算時(shí)

Python 分?jǐn)?shù)

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

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

我們可以通過多種方式創(chuàng)建Fraction對象。

import fractions

# 輸出: 3/2
print(fractions.Fraction(1.5))

# 輸出: 5
print(fractions.Fraction(5))

# 輸出: 1/3
print(fractions.Fraction(1,3))

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

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

import fractions

# 用作 float
# 輸出: 2476979795053773/2251799813685248
print(fractions.Fraction(1.1))

# 用作 string
# 輸出: 11/10
print(fractions.Fraction('1.1'))

此數(shù)據(jù)類型支持所有基本操作。這里有幾個(gè)示例。

from fractions import Fraction as F

# 輸出: 2/3
print(F(1,3) + F(1,3))

# 輸出: 6/5
print(1 / F(5,6))

# 輸出: False
print(F(-3,10) > 0)

# 輸出: True
print(F(-3,10) < 0)

Python 數(shù)學(xué)

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

import math

# 輸出: 3.141592653589793
print(math.pi)

# 輸出: -1.0
print(math.cos(math.pi))

# 輸出: 22026.465794806718
print(math.exp(10))

# 輸出: 3.0
print(math.log10(1000))

# 輸出: 1.1752011936438014
print(math.sinh(1))

# 輸出: 720
print(math.factorial(6))

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

import random

# 輸出: 16
print(random.randrange(10,20))

x = ['a', 'b', 'c', 'd', 'e']

# 得到隨機(jī)選項(xiàng)
print(random.choice(x))

# 打亂x列表順序
random.shuffle(x)

# 打印輸出被打亂順序后的x
print(x)

# 打印隨機(jī)元素
print(random.random())

輸出結(jié)果(隨機(jī)結(jié)果):

19
c
['e', 'a', 'd', 'c', 'b']
0.707947055817621

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

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清