#8 Python數學方法

前言

前幾節瞭解了Python的不一樣數據類型,有小夥伴會問,不一樣的數據類型之間是否能夠相互轉換?確定是能夠的,本篇博文主要記錄數字類型的轉換,其餘類型的相互轉換會在下幾節記錄,Here we go!python

1、Python數字類型轉換

經過前幾節,咱們知道Python數字的數據類型有:整型、長整型、浮點型、和複數,它們之間是如何轉換的呢?亦或者它們是如何轉換爲其餘數據類型呢?先來看全部的方法:dom

int(x [,base ])                        # 將 x 轉換爲一個整數  
float(x )                              # 將 x 轉換到一個浮點數  
complex(real [,imag ])                 # 建立一個複數  
str(x )                                # 將對象 x 轉換爲字符串  
repr(x )                               # 將對象 x 轉換爲表達式字符串  
eval(str )                             # 用來計算在字符串中的有效Python表達式,並返回一個對象  
tuple(s )                              # 將序列 s 轉換爲一個元組  
list(s )                               # 將序列 s 轉換爲一個列表  
chr(x )                                # 將一個整數轉換爲一個字符  
ord(x )                                # 將一個字符轉換爲它的整數值  
hex(x )                                # 將一個整數轉換爲一個十六進制字符串  
oct(x )                                # 將一個整數轉換爲一個八進制字符串  
bin(x) # 將一個整數轉換爲一個二進制字符串

咱們先來申明一個變量 num1 = 6 ,以後用 type() 函數查看其數據類型,任何數據類型均可以用此函數查看:ide

In [103]: num1 = 6

In [104]: type(num1)
Out[104]: int

能夠看到 num1 默認是 int 類型的,再來建立  num2 = 6.6 ,再次查看其數據類型:函數

In [105]: num2 = 6.6

In [106]: type(num2)
Out[106]: float

能夠看到 num2 默認是 float 類型的,也就是說,當在Python中建立一個整數的時候,默認的數據類型爲 int ,建立一個小數的時候,默認的數據類型是 float ,建立完後想要修改其數據類型就要用到上面的類型轉換函數了ui

In [110]: float(num1)
Out[110]: 6.0
int 轉換爲 float
In [114]: int(6.6)
Out[114]: 6

In [115]: int(-5.5)
Out[115]: -5

# int函數會把小數位所有抹去,保留整數部分
float 轉換爲 int
In [116]: complex(5,8)
Out[116]: (5+8j)

# complex(實部,虛部),虛部能夠省略
建立複數
In [117]: str(5)
Out[117]: '5'

In [118]: str(6.6)
Out[118]: '6.6'
數字轉換爲字符串
In [123]: s = 'print("Hello,world!")'

In [124]: s
Out[124]: 'print("Hello,world!")'

In [125]: eval(s)
Hello,world!

# 能夠看到將字符串執行了
執行字符串的有效表達式
In [130]: tuple([1,2,3])
Out[130]: (1, 2, 3)
列表轉換爲元組
In [139]: chr(56)
Out[139]: '8'

# 這裏涉及ASC碼的內容
整數轉換爲字符
In [142]: ord('8')
Out[142]: 56

# 這裏涉及ASC碼的內容
字符轉換爲整數
In [143]: hex(15)
Out[143]: '0xf'

# 十六進制的數以 0x 開頭
整數轉換爲十六進制
In [144]: oct(20)
Out[144]: '0o24'

# 八進制以 0o 開頭
整數轉換爲八進制
In [145]: bin(5)
Out[145]: '0b101'

# 二進制以 0b 開頭
整數轉化爲二進制

2、Python數學方法

提及數學方法,確定再也不是簡單的加減乘除乘方等基礎運算了,數學方法更可能是取絕對值、指數運算、對數運算、冪運算,開方運算以及三角函數等,這些方法涉及到的領域也是至關廣闊,這部分也是很是重要的,每一個人都應該熟練應用,尤爲是想要去作數據方面工做的小夥伴。spa

math模塊和cmath模塊

Python中大量的數學方法並無在內置函數中,而是在兩個模塊中,在使用數學方法以前,必須在Python程序中根據須要導入math模塊或者cmath模塊。math模塊的對象主要是實數,cmath模塊主要面向複數,兩者包含的方法基本一致,根據實際使用需求導入便可,導入方法:code

import math

回車之後如何沒有任何報錯信息就證實導入成功了,關於模塊的詳細概念會在以後的一節專門講到,這裏就先導入使用,不去作太多的解釋。orm

導入之後,能夠查看其幫助信息,還記得 help() 函數嗎:對象

In [146]: import math

In [147]: help(math)
Help on built-in module math:

NAME
    math

DESCRIPTION
    This module is always available.  It provides access to the
    mathematical functions defined by the C standard.

FUNCTIONS
    acos(...)
        acos(x)

        Return the arc cosine (measured in radians) of x.

    acosh(...)
        acosh(x)

        Return the inverse hyperbolic cosine of x.

    asin(...)
        asin(x)

        Return the arc sine (measured in radians) of x.

-- More  --

能夠看到 math 模塊的幫助信息很全很複雜,一頁都展現不完(--- More ---),能夠按空格健翻頁或者回車鍵翻一行,Q鍵退出;若是隻是想要快速查看其包含的方法,能夠用 dir() 函數:blog

In [148]: dir(math)
Out[148]:
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
In [149]: import cmath

In [150]: dir(cmath)
Out[150]:
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atanh', 'cos', 'cosh', 'e', 'exp', 'isclose', 'isfinite', 'isinf', 'isnan', 'log', 'log10', 'phase', 'pi', 'polar', 'rect', 'sin', 'sinh', 'sqrt', 'tan', 'tanh']

能夠看到math模塊和cmath模塊都有大量的方法,而且兩者方法基本上同樣,接下來,以math模塊爲例,詳細的介紹其包含的方法

想要查看模塊裏面具體方法的幫助信息時,能夠用 help() 函數查看:

In [173]: help(math.exp)   # 注意是 math.exp, 不是 math.exp()
Help on built-in function exp in module math:

exp(...)
    exp(x)

    Return e raised to the power of x.

注意:查看具體方法時,只寫方法名稱便可,不要加括號,不然會報錯!

數學函數

abs(x)             # 返回數字的絕對值,如abs(-10) 返回 10
math.ceil(x)       # 返回數字的上入整數,如math.ceil(4.1) 返回 5
cmp(x, y)          # 若是 x < y 返回 -1, 若是 x == y 返回 0, 若是 x > y 返回 1
math.exp(x)        # 返回e的x次冪(ex),如math.exp(1) 返回2.718281828459045
math.fabs(x)       # 返回數字的絕對值,如math.fabs(-10) 返回10.0
math.floor(x)      # 返回數字的下舍整數,如math.floor(4.9)返回 4
math.log(x)        # 如math.log(math.e)返回1.0,math.log(100,10)返回2.0
math.log10(x)      # 返回以10爲基數的x的對數,如math.log10(100)返回 2.0
max(x1, x2,...)    # 返回給定參數的最大值,參數能夠爲序列。
min(x1, x2,...)    # 返回給定參數的最小值,參數能夠爲序列。
math.modf(x)       # 返回x的整數部分與小數部分,兩部分的數值符號與x相同,整數部分以浮點型表示。
math.pow(x, y)     # x**y 運算後的值。
round(x [,n])      # 返回浮點數x的四捨五入值,如給出n值,則表明舍入到小數點後的位數。
math.sqrt(x)       # 返回數字x的平方根

能夠看到,上面有些方法是直接寫出的,如 abs(x) ,而有一些方法前面有 math. ,如 math.exp(x),這實際上是有緣由的,直接寫出的表示是系統內置函數,不用導入任何模塊就可使用,而加前綴的表示這個方法是這個模塊裏面的,必須加前綴,否者會報錯,任何模塊裏面的方法都要加上這個模塊的前綴,例如:

In [159]: import math

In [160]: exp(2)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-160-840a487878a2> in <module>
----> 1 exp(2)

NameError: name 'exp' is not defined   # 不加前綴表示這個方法沒有被定義

In [161]: math.exp(2)                  # 加上前綴就能夠正常使用了
Out[161]: 7.38905609893065

上面的方法就不一一舉例了,要注意 round(x) ,這個函數執行原理是:四捨六入五湊偶,小數位爲5的時候要看前一位,前一位是偶數就捨棄,是奇數就進一

三角函數

math.acos(x)         # 返回x的反餘弦弧度值。
math.asin(x)         # 返回x的反正弦弧度值。
math.atan(x)         # 返回x的反正切弧度值。
math.atan2(y, x)     # 返回給定的 X 及 Y 座標值的反正切值。
math.cos(x)          # 返回x的弧度的餘弦值。
math.hypot(x, y)     # 返回歐幾里德範數 math.sqrt(x*x + y*y)。
math.sin(x)          # 返回的x弧度的正弦值。
math.tan(x)          # 返回x弧度的正切值。
math.degrees(x)      # 將弧度轉換爲角度,如math.degrees(math.pi/2) , 返回90.0
math.radians(x)      # 將角度轉換爲弧度

能夠看到涉及三角函數的方法都在 math 模塊裏面

數字常量

math.pi    # 數學常量 pi(圓周率,通常以π來表示)
math.e     # 數學常量 e,e即天然常數(天然常數)。

兩個最多見的數字常量,圓周率 pi 和天然常數 e 也在 math 模塊裏面

In [164]: math.pi
Out[164]: 3.141592653589793

In [165]: math.e
Out[165]: 2.718281828459045

隨機數函數

隨機函數常做爲隨機數發生器使用,大量領域會用到隨機數,Python的隨機數基本上都在 random模塊中,具體方法以下:

In [171]: import random

In [172]: dir(random)
Out[172]:
['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', '_BuiltinMethodType', '_MethodType', '_Sequence', '_Set', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_acos', '_ceil', '_cos', '_e', '_exp', '_inst', '_log', '_pi', '_random', '_sha512', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', '_warn', 'betavariate', 'choice', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'lognormvariate', 'normalvariate', 'paretovariate', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvariate']

其主要函數功能:

random.choice(seq)                          # 從序列的元素中隨機挑選一個元素,好比random.choice(range(10)),從0到9中隨機挑選一個整數。
random.randrange ([start,] stop [,step])    # 從指定範圍內,按指定基數遞增的集合中獲取一個隨機數,基數缺省值爲1
random.random()                             # 隨機生成下一個實數,它在[0,1)範圍內。
random.seed([x])                            # 改變隨機數生成器的種子seed。若是你不瞭解其原理,你沒必要特別去設定seed,Python會幫你選擇seed。
random.shuffle(lst)                         # 將序列的全部元素隨機排序
random.uniform(x, y)                        # 隨機生成下一個實數,它在[x,y]範圍內。
相關文章
相關標籤/搜索