Python3學習筆記 | 二、Python的類型與運算
- 2019 年 10 月 7 日
- 筆記
一、數字類型
1、整數
- 0,-1234,5678,9223372036854775808
- 十六進制:0x9a,0XFF
- 八進制:0o73,0O35
- 二進制:0b100100,0B101100 2、浮點數 1.23,1.,3.45e-10,4E100 3、複數 complex(real,imag), 3+5j,4J 4、其他
- 分數:Fraction(4,5), Fraction(7,8)
- 無窮大/小:float(『inf』), float(『-inf』)
- 非數字NaN:float(『nan』) 二、數字類型的應用 1、整數 在Python 2.x版本中整數分為一般整數和長整數,但是在Python 3.x就沒有這種區分,整數只有一個類型,在Python里整數可以輸入或輸出成二進制,八進制或者十六進制數。
二進制數表示方式為0b或者0B開頭。例如:0b10110010,0B11001001 八進制數表述方式為0o或者0O開頭。例如:0o632765,0O223174 十六進制數表述方式為0x或者0X開頭。例如:0xff,0X3A,0xAC,0Xb7
需要把整數輸出成非十進制數的時候,需要使用一下函數:bin(i), oct(i), hex(i) ,在這裡i是十進制數字,輸出的是文本形式。
>>> bin(153) '0b10011001' >>> oct(153) '0o231' >>> hex(153) '0x99'
我們需要把一個非十進制數的文本轉化為整數:int(str,base) ,在這裡,str是文本形式的數字,base為2,8,16 數字。各自代表二進制,八進制,十六進制。
>>> int('10011001',2) 153 >>> int('231',8) 153 >>> int('99',16) 153 >>> int('49',36) 153
註:Python提供從2進制到36進制數的輸入。
2、浮點數
在Python里浮點數是用64bit來存儲的,精度大約能達到17位。
>>> print(1.0/7.0) 0.14285714285714285
3、複數
在Python里複數的現實方式跟現實稍微有點區別,在現實中,例如:1+3i,在這裡1是實數部分,3i為虛數部分,而在Python中則是 1+3j,也就是將現實里的i換成「j」或者「J」來表示。
在Python里還有一種表示方式是函數格式:complex(1,3)
>>> Dora=1+3j >>> Emon=1+3J >>> Daxiong=complex(1,3) >>> Dora==Emon True >>> Dora==Daxiong True >>> Emon==Daxiong True
4、其他
在一些特殊場景,我們會需要特殊的數字類型,比如分數、無窮大無窮小或者非數字。
a、分數
在Python里使用Fraction函數來表示分數。
>>> from fractions import * >>> print(Fraction(1,3)) 1/3
b、無窮大,無窮小
float(『inf』)是無窮大,float(『-inf』)是無窮小
>>> 1/float('inf') 0.0 >>> 1/float('-inf') -0.0
c、非數字
float(『nan』)用來表示非數字。
>>> float('nan') nan >>> 7+float('nan') nan
三、運算符
1、各類運算符
算數運算符:+,-,,/,%,//,** 比較運算符:==,!=,>,<,>=,<= 賦值運算符:=,+=,-=,=,/=,%=,//=,**= 位運算符:&,|,^,~,<<,>> 邏輯運算符:and,or,not 成員運算符:in, not in 身份運算符:is, is not
2、運算符優先級
~,+,- #這裡的加和減是一元運算符 ,/,%,// +,- <<,>> & ^,| <=,>=,<,> ==,!= =,+=,-=,=,/=,%=,//=,= is, is not in, not in not,and,or
四、運算符應用
1、類型升級
>>> Dora=153 >>> Emon=1.53 >>> Da=1+3j >>> Xiong=Fraction(1,3) >>> print(type(Dora),type(Emon),type(Da),type(Xiong)) <class 'int'> <class 'float'> <class 'complex'> <class 'fractions.Fraction'> >>> print(type(Dora+Emon),type(Dora+Da),type(Dora+Xiong),type(Da+Xiong)) <class 'float'> <class 'complex'> <class 'fractions.Fraction'> <class 'complex'>
註:type()函數可以用來查看字符類型。
2、只能用於整數的運算符
位運算符:&、|、^、~、<<、>>
3、結果可能不是預期的運算符
邏輯運算符:and,or
>>> 1 and 3 3 >>> 3 and 1 1 >>> 1 or 3 1 >>> 3 or 1 3
4、比較運算符連續性
xz相當於xz
>>> 1<3>5 False >>> 1<3 and 3>5 False
五、基本數學函數
1、pow:冪函數 2、abs:絕對值 3、fabs:絕對值(與abs稍微有區別)(math) 4、round:四捨五入 5、ceil,floor:取整(math) 6、int,bin,oct,hex,float等:格式轉換 7、random:隨機函數(random) 8、log:算出自然對數(math) 9、log10:算出底數為10的對數(math) 10、max,min:選出最大,最小值 11、modf:對浮點數分成小數部分和整數部分(math) 12、sqrt:算出平方根
六、數學函數的應用
1、pow:冪函數,功能與運算符**一樣
>>> pow(5,3) 125
2、abs:取絕對值
>>> abs(-153) 153
3、fabs:取絕對值,fabs函數取出來的是浮點數,而abs可以保持原有的數字類型
>>> import math >>> math.fabs(-153) 153.0
4、round:四捨五入?
>>> round(13.5) 14 >>> round(2.5) 2 >>> round(1/3,5) 0.33333
5、ceil:取最小的大於該值的最大整數 floor:取最大的小於該值的最小整數
>>> math.ceil(13.5) 14 >>> math.floor(13.5) 13
6、格式轉換 見本文第二章:整數,在此不多贅述 7、random,是Python 里很好的隨機函數使用的模塊,其使用方法如下: a、取0-1之間的隨機小數:
>>> import random >>> random.random() 0.41430515476488494
b、取自定義數里的隨機數(多個元素):
>>> random.choice((1,2,3,4,5,6,7)) 6 >>> random.choice((1,2,3,4,5,6,7)) 2 >>> random.sample((1,2,3,4,5,6,7),3) [4, 5, 3]
c、隨機打亂順序:
>>> a=[1,2,3,4,5,6,7] >>> random.shuffle(a) >>> a [6, 2, 5, 1, 7, 4, 3]
d、獲取N位隨機數(二進制):
>>> random.getrandbits(200) 771596897424695624466272211269661342068063847000212188678258
註:random.getrandbits(n),返回的是0-2^n之間的數 8、log:指數函數,默認e為底數,結果為浮點數,可以自定義底數。
>>> math.log(8) 2.0794415416798357 >>> math.log(8,2) 3.0
9、log10:以10為底數的指數函數。
>>> math.log10(1000) 3.0
10、max,min:選出最大,最小值
>>> max(1,3,5,2,4) 5 >>> min(1,3,5,2,4) 1
11、modf:將浮點數的整數位和小數位單獨取出來
>>> math.modf(13.5) (0.5, 13.0)
12、sqrt:算出當前數的平方根
>>> math.sqrt(49) 7.0
七、其他數字相關內容
1、round與格式化輸出
當輸出以一定的格式來輸出的時候,比如:a的值是2.5和2.335,2.345的時候,我們只需要小數點之後兩位,這個時候不會使用round函數來進行所謂的「四捨五入」,兩者也會有點區別。
>>> round(2.5) 2 >>> format(2.5,'0.0f') '2' >>> round(2.335,2) 2.33 >>> format(2.335,'0.2f') '2.33' >>> round(2.345,2) 2.35 >>> format(2.345,'0.2f') '2.35'
2、Decimal模塊
在使用浮點數的時候,因為計算機里是使用二進制來表示,所以會出現精度問題,當金融行業等不許出現一絲問題的時候,我們會使用Decimal模塊來解決精度問題。
>>> a=2.1 >>> b=4.2 >>> a+b 6.300000000000001 >>> from decimal import * >>> a= Decimal('2.1') >>> b= Decimal('4.2') >>> a+b Decimal('6.3')
3、format格式化輸出
使用bin(),oct(),hex()的時候會發現前面會加0b,0o,0x。我們不想要前綴的時候可以使用format函數來解決。
>>> a=153 >>> print(bin(a),oct(a),hex(a)) 0b10011001 0o231 0x99 >>> print(format(a,'b'),format(a,'o'),format(a,'x')) 10011001 231 99