本篇介紹一些可能比較常用的數學運算。以下範例皆假設各位已在 cmd 當中輸入過,或者檔案當中有「import math」。
數論系列:
math.ceil(0.4) # 往正向無條件進位至整數 math.floor(0.6) # 往負向無條件捨位至整數 round(12.34) # 四捨五入。這是內建函式,前面不需要「math.」 round(56.78) # 四捨五入。再說一次,這是內建函式,前面不需要「math.」 math.fabs(-12.345) # 絕對值。亦可使用「abs(-12.345)」,「abs」也是是內建函式,前面不需要「math.」 math.factorial(5) # 階乘 math.gcd(12, 34) # 最大公因數,Python 3.5 開始支援指數對數系列:
math.exp(3) # e 的幾次方 math.pow(3, 5) # x 的 y 次方,相當於 x**y math.sqrt(2) # x 的開根號 math.log(20.085536923187668) # 自然對數 math.log2(8) math.log10(7) # 若要計算其他底數的對數,請使用「math.log(真數, 底數)」的方式,或自行套用換底公式三角函數系列,其輸入單位為弧度:
math.sin(0.5) math.cos(0.5) math.tan(0.5) # 利用 radians 將角度轉換為弧度 math.sin(math.radians(45)) math.cos(math.radians(45)) math.tan(math.radians(45)) # 反三角函數,並利用 degrees 將結果從弧度轉為角度 tmp = 1 / math.sqrt(2) math.degrees(math.asin(tmp)) math.degrees(math.acos(tmp)) math.degrees(math.atan(tmp))在前面的一些範例中,你可能會發現數字會少掉或者多出一個很小的數字。這是由於浮點數在電腦中的精確度限制所造成,只要程式當中需要進行浮點數的運算,就很可能會碰到類似問題,例如加法不一定遵守結合律(associative):
print(0.1 + 0.2 + 0.3) print((0.1 + 0.2) + 0.3) print(0.1 + (0.2 + 0.3)) print((0.1 + 0.2) + 0.3 == 0.1 + (0.2 + 0.3))例如一開始介紹的 round 內建函式,在四捨五入到小數點下指定位數的時候,也會遇到問題:
round(3.15, 1) # 數學上是 3.2 round(4.15, 1) # 數學上是 4.2 round(5.15, 1) # 數學上是 5.2若想要有效的處理類似問題,可以自行參考「decimal」這個模組。