Python3學習筆記 | 二、Python的類型與運算

  • 2019 年 10 月 7 日
  • 筆記

一、數字類型

1、整數

  1. 0,-1234,5678,9223372036854775808
  2. 十六進制:0x9a,0XFF
  3. 八進制:0o73,0O35
  4. 二進制:0b100100,0B101100 2、浮點數 1.23,1.,3.45e-10,4E100 3、複數 complex(real,imag), 3+5j,4J 4、其他
  5. 分數:Fraction(4,5), Fraction(7,8)
  6. 無窮大/小:float(『inf』), float(『-inf』)
  7. 非數字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