1. 程式人生 > >Python學習筆記(四)——數字

Python學習筆記(四)——數字

二進制 十進制數 proc 最大值 amp dict inter 圖片 class

數字

在Python中,數字並不是一個真正的對象類型,而是一組類似類型的分類。Python不僅支持通常的數據類型(整數和浮點數。),而且能夠通過常量去直接創建數字以及處理數字的表達式。

? 整數和浮點數
? 復數
? 固定精度的十進制數;
? 有理分數
? 集合
? 布爾類型
? 無窮的整數精度
? 各種數字內置函數和模塊。

數字常量:
數字 常量
123,-23,0,99999…… 整數(無窮大小)
1.23,1.,3.14e-10,4E210 浮點數

0o177,0x9ff,0b11000 Python3.0中的八進制、十六進制和二進制常量
3+4j,3j 復數產量

Python表達式操作符:
技術分享圖片

數字變量表達式:
? 變量在它第一次賦值時創建
? 變量在表達式中使用將被替換為它們的值
? 變量在表達式中使用之前必須已賦值
? 變量像對象一樣不需要在一開始進行聲明

>>> a=3
>>> b=4
>>> a,b
(3, 4)

數字的轉換:

>>> int(‘100‘)          #將數字從文本轉換為數字
100
>>> str(100)            #將數字從數字轉換為文本
‘100‘

數字顯示格式:

>>> num=1/3.0
>>> num
0.3333333333333333
>>>
>>>
>>>
>>> print(num)
0.3333333333333333
>>>
>>> ‘%e‘%num
‘3.333333e-01‘
>>> ‘%4.2f‘%num
‘0.33‘
>>> ‘{0:4.2f}‘.format(num)
‘0.33‘
>>>

數字比較:一般的和連續的
一般的比較操作數相對大小,並且返回一個布爾類型的結果。

>>> 1<2
True
>>>
>>> 2.0>=1
True

>>> 2.0==2.0
True
>>> 2.0!=2.0
False

連續比較:

>>> x=10
>>> y=20
>>> z=30
>>>
>>>
>>> x<y<z
True
>>> x<y>z
False

獲取數字最大值和最小值的函數:

>>> max(x,y,z)
30
>>> min(x,y,z)
10
>>>

除法:

傳統除法、Floor除法和真除法:

傳統除法:
X / Y
傳統除法和真除法,在Python2.6及之前的版本中,這個操作對於整數部分會省去小數部分,對於浮點數會保持小數部分。在Python3.0版本中為真除法(無論任何類型都會保持小數部分)。

Floor除法:
X // Y
在Python2.2中新增操作,在Python2.6和Python3.0均能使用。操作不考慮操作對象類型,總會省略結果的小數部分,剩下最小的能整除的整數部分。

在Python3.0中取消了傳統除法,/和//分別實現真除法和floor除法。

>>> 10 / 4
2.5
>>>
>>> 10 // 4
2
>>>
>>> 10 / 4.0
2.5
>>>
>>> 10 // 4.0
2.0
>>>
>>> 5 / 2.0
2.5
>>> 5 // 2.0
2.0
>>>
>>> 5 / -2.0
-2.5
>>> 5 // -2.0
-3.0
>>>

整數精度:
Python3.0整數支持無窮的大小,Python2.6長整數在末尾顯示一個“L”。

復數:
復數分為兩個浮點數(實部和虛部)並在虛部增加了j或J的後綴。可以把非零實部的復數寫成由+連接起來的兩部分。

>>>
>>> 1j*1j
(-1+0j)
>>> 2+3j*3
(2+9j)
>>> (5+6j)**2
(-11+60j)
>>>

十六進制、八進制和二進制常量

>>>
>>> 0o1,0o20,0o377
(1, 16, 255)
>>>
>>> 0x01,0x10,0xFF
(1, 16, 255)
>>>
>>> 0b1,0b10000,0b11111111
(1, 16, 255)
>>>

>>>
>>> oct(64),hex(64),bin(64)
(‘0o100‘, ‘0x40‘, ‘0b1000000‘)
>>>

Int將數字按照進制進行轉換:

>>>
>>> int(‘64‘)
64
>>> int(‘100‘,8)
64
>>> int(‘40‘,16)
64
>>> int(‘1000000‘,2)
64
>>>
>>> int(‘0o100‘,8),int(‘0x40‘,16),int(‘0b1000000‘,2)
(64, 64, 64)

Eval函數:

>>>
>>> eval(‘64‘),eval(‘0o100‘),eval(‘0x40‘),eval(‘0b1000000‘)
(64, 64, 64, 64)
>>>

通過字符調用轉換進制:

>>> ‘{0:o},{1:x},{2:b}‘.format(64,64,64)
‘100,40,1000000‘
>>>
>>>
>>> ‘%o,%x,%X‘ % (64,255,255)
‘100,ff,FF‘
>>>

位操作

把整數當作二進制位串進行位移及布爾操作。

>>>
>>> x=1
>>>
>>> x<<1
2
>>> x<<2
4
>>> x<<3
8
>>> y=8
>>>
>>> y>>1
4
>>> y>>2
2
>>> y>>3
1
>>> y>>4
0
>>> y>>5
0
>>>

>>>
>>> x=0b0001
>>>
>>> x
1
>>> bin(x<<1)
‘0b10‘
>>> bin(x<<2)
‘0b100‘
>>> bin(x<<3)
‘0b1000‘
>>> bin(x<<4)
‘0b10000‘
>>>
>>>
>>> bin(x | 0b0010)
‘0b11‘
>>>
>>>
>>> bin(x ^ 0b0010)
‘0b11‘
>>>
>>> bin(x & 0b0010)
‘0b0‘
>>>

顯示數字二進制的位數:

>>> X=100
>>>
>>> bin(X),X.bit_length()
(‘0b1100100‘, 7)
>>>
>>> Y=101
>>>
>>> bin(Y),Y.bit_length()
(‘0b1100101‘, 7)

小數
小數是固定精度的浮點值。
小數對象:小數是通過導入decimal模塊調用函數後創建的。擁有固定的位數和小數點。

浮點數字缺乏精確性,因為存放數值的空間有限。

>>>
>>> 0.1+0.1+0.1-0.3
5.551115123125783e-17
>>>

>>>
>>> from decimal import Decimal
>>>
>>> Decimal(‘0.1‘) + Decimal(‘0.1‘) + Decimal(‘0.1‘) - Decimal(‘0.3‘)
Decimal(‘0.0‘)
>>>

當小數對象中的字符串小數位數多時,會自動調整。

>>> Decimal(‘0.1‘) + Decimal(‘0.1‘) + Decimal(‘0.100‘) - Decimal(‘0.3‘)
Decimal(‘0.000‘)

全局精度設置:

>>>
>>> import decimal
>>>
>>> decimal.Decimal(1) / decimal.Decimal(7)
Decimal(‘0.1428571428571428571428571429‘)
>>>
>>> decimal.getcontext().prec = 4
>>>
>>> decimal.Decimal(1) / decimal.Decimal(7)
Decimal(‘0.1429‘)
>>>

分數
分數在Python中以類似小數的方式使用,也存在於模塊中,導入其構造函數並傳遞一個分子和分母就可以產生一個分數。

>>>
>>> from fractions import Fraction
>>>
>>> x=Fraction(1,3)
>>> y=Fraction(4,6)
>>>
>>> x
Fraction(1, 3)
>>>
>>> y
Fraction(2, 3)
>>>
>>> print(x,y)
1/3 2/3
>>>

分數的數學表達式:

>>>
>>> x+y
Fraction(1, 1)
>>> x-y
Fraction(-1, 3)
>>> x*y
Fraction(2, 9)
>>>

通過浮點字符串創建分數對象:

>>>
>>> Fraction(‘.25‘)
Fraction(1, 4)
>>>
>>> Fraction(‘1.25‘)
Fraction(5, 4)
>>>
>>> Fraction(‘.25‘)+Fraction(‘1.25‘)
Fraction(3, 2)
>>>

>>>
>>> z=2.5
>>>
>>> o=Fraction(*z.as_integer_ratio())
>>>
>>> o
Fraction(5, 2)

內置數學工具:

>>>
>>> import math
>>>
>>> math.pi,math.e
(3.141592653589793, 2.718281828459045)
>>>
>>> math.sin(2*math.pi / 180)
0.03489949670250097
>>>
>>> math.sqrt(144),math.sqrt(3),math.sqrt(4)
(12.0, 1.7320508075688772, 2.0)
>>>
>>> pow(2,4),pow(2,5),2**4,2**5
(16, 32, 16, 32)
>>>
>>> abs(-42.0),sum((1,2,3,4,5,6))       #求絕對值,求和
(42.0, 21)
>>>
>>> min(3,1,2,4,5)                      #求最小數
1
>>> max(3,1,2,4,5)                  #求最大數
5
>>>

小數截斷方式:

>>>
>>> math.floor(2.567),math.floor(-2.567)
(2, -3)
>>> math.trunc(2.567),math.trunc(-2.567)
(2, -2)
>>>
>>> int(2.567),int(-2.567)
(2, -2)
>>>
>>> round(2.567),round(2.467),round(2.567,2)
(3, 2, 2.57)
>>>
>>> ‘%.1f‘ % 2.567,‘{0:.2f}‘.format(2.567)
(‘2.6‘, ‘2.57‘)
>>>

range-----生成隨機數函數

>>>
>>> import random
>>>
>>> random.random()
0.6746601025987419
>>> random.random()
0.569446993489575
>>> random.random()
0.31398115374410795
>>>
>>>
>>> random.randint(1,10)
10
>>> random.randint(1,10)
4
>>> random.randint(1,10)
1
>>>
>>> random.choice([‘banane‘,‘apple‘,‘orange‘])
‘banane‘
>>>
>>> random.choice([‘banane‘,‘apple‘,‘orange‘])
‘orange‘
>>> random.choice([‘banane‘,‘apple‘,‘orange‘])
‘orange‘
>>> random.choice([‘banane‘,‘apple‘,‘orange‘])
‘apple‘
>>>

集合

集合(set),是唯一的、不可變的對象的一個無序集合(collection),支持與數學集合理論相對應的操作。一個項,無論在集合中添加多少次,都只能出現一次。
集合是無序的,並且不會把鍵匹配到值,既不是序列也不是映射類型。

>>>
>>> x = set(‘abcde‘)
>>> y = set(‘bdxyz‘)
>>>
>>> x,y
({‘a‘, ‘e‘, ‘d‘, ‘b‘, ‘c‘}, {‘y‘, ‘x‘, ‘d‘, ‘b‘, ‘z‘})
>>>
>>> ‘e‘ in x
True
>>> ‘g‘ in x
False
>>>
>>> x - y
{‘c‘, ‘e‘, ‘a‘}
>>>
>>> x | y
{‘a‘, ‘e‘, ‘y‘, ‘x‘, ‘d‘, ‘b‘, ‘c‘, ‘z‘}
>>>
>>> x & y
{‘b‘, ‘d‘}
>>>
>>> x ^ y
{‘c‘, ‘a‘, ‘y‘, ‘e‘, ‘x‘, ‘z‘}
>>>
>>> x > y,x < y
(False, False)
>>> #Add方法插入項、update按位置求集、remove根據值刪除一個項目。
>>>
>>> z = x.intersection(y)       #  same as x & y
>>>
>>> z
{‘b‘, ‘d‘}
>>>
>>> z.add(‘yert‘)
>>>
>>> z
{‘b‘, ‘d‘, ‘yert‘}
>>>
>>> z.update(set(‘ace‘))
>>>
>>> z
{‘b‘, ‘c‘, ‘e‘, ‘a‘, ‘d‘, ‘yert‘}
>>>
>>> z.remove(‘b‘)
>>>
>>> z
{‘c‘, ‘e‘, ‘a‘, ‘d‘, ‘yert‘}
>>>
>>>

>>>
>>> a=set(‘123‘)
>>>
>>> a=set([1,2,3])
>>>
>>> a
{1, 2, 3}
>>>
>>> a.union([3,4])
{1, 2, 3, 4}
>>>
>>> a.intersection((1,3,5))
{1, 3}
>>>
>>> a.issubset(range(-5,5))
True
>>>

在Python中{}仍然是一個字典,空的集合必須通過內置函數set創建,並且以同樣方式顯示。

>>> b={1,2,3}
>>> b
{1, 2, 3}
>>>
>>>
>>> type(b)
<class ‘set‘>
>>>
>>>
>>> type({})
<class ‘dict‘>
>>>
>>> a={}
>>>
>>> a
{}
>>> c={}
>>>
>>>
>>> type(c)
<class ‘dict‘>
>>>
>>>
>>> d=set()
>>>
>>> d
set()
>>>
>>> type(d)
<class ‘set‘>
>>>

集合與列表的轉換:

>>>
>>> L=[1,2,1,3,4,5,6,7,8.7]
>>>
>>> set(L)
{1, 2, 3, 4, 5, 6, 7, 8.7}
>>>
>>> L=list(set(L))
>>>
>>> L
[1, 2, 3, 4, 5, 6, 7, 8.7]
>>>

Python學習筆記(四)——數字