本篇介紹一些可能比較常用的數學運算。以下範例皆假設各位已在 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」這個模組。