21.Python算術運算符及用法詳解


算術運算符是處理四則運算的符號,在數字的處理中應用得最多。Python 支持所有的基本算術運算符,如表 1 所示。

表 1 Python常用算術運算符
運算符 說明 實例 結果
+ 12.45 + 15 27.45
- 4.56 - 0.26 4.3
* 5 * 3.6 18.0
/ 7 / 2 3.5
% 取余,即返回除法的余數 7 % 2 1
// 整除,返回商的整數部分 7 // 2 3
** 冪,即返回 x 的 y 次方 2 ** 4 16,即 24

 

接下來將對表 1 中各個算術運算符的用法逐一講解。

+ 加法運算符

例如如下代碼:

  1. a = 5.2
  2. b = 3.1
  3. the_sum = a + b
  4. # sum的值為8.3
  5. print("the_sum的值為:", the_sum)

除此之外,“+”還可以作為字符串(包括后續要介紹的序列)的連接運算符。例如如下代碼:

  1. s1 = 'Hello, '
  2. s2 = 'Charlie'
  3. # 使用+連接兩個字符串
  4. print(s1 + s2)

- 減法運算符

例如如下代碼:

  1. c = 5.2
  2. d = 3.1
  3. sub = c - d
  4. # sub的值為2.1
  5. print("sub的值為:", sub)

此外,“-”除了可以作為減法運算符之外,還可以作為求負的運算符。請看如下代碼:

  1. # 定義變量x,其值為-5.0
  2. x = -5.0
  3. # 將x求負,其值變成5.0
  4. x = -x
  5. print(x)

但單目運算符“+”則不對操作數做任何改變,例如如下代碼:

  1. # 定義變量y,其值為-5.0
  2. y = -5.0
  3. # y值依然是-5.0
  4. y = +y
  5. print(y)

*乘法運算符

例如如下代碼:

  1. e = 5.2
  2. f = 3.1
  3. multiply = e * f
  4. # multiply的值為16.12
  5. print("multiply的值為:", multiply)

此外,“*”還可以作為字符串(包括后續要介紹的序列)的連接運算符,表示將 N 個字符串連接起來。例如如下代碼:

  1. s3 = 'crazyit '
  2. # 使用*將5個字符串連接起來
  3. print(s3 * 5)

上面代碼將會輸出:

crazyit crazyit crazyit crazyit crazyit

/ 和 // 除法運算符

Python 的除法運算符有兩個:“/”表示普通除法,使用它除出來的結果與平常數學計算的結果是相同的(即除不盡時,會產生小數部分);而“//”表示整除,使用它除出來的結果只有整數部分,小數部分將會被舍棄。

記住,在 Python 3.x 中,除法運算的結果都是浮點類型。

例如如下代碼:

  1. print("19/4的結果是:", 19/4)
  2. print("19//4的結果是:", 19//4)
  3. aa = 5.2
  4. bb = 3.1
  5. # aa / bb的值將是1.67741935483871
  6. print("aa/bb的值是:", aa / bb)
  7. # aa // bb值將是1.0
  8. print("aa//bb的值是:", aa // bb)

此外,Python 不允許使用 0 作為除數,否則將會引發 ZeroDivisionError 錯誤。

在有些編程語言中,0 作為除數會得到無窮大,包括正無窮大或負無窮大。

對於 Python 2.x 而言,它只提供了一個“/”運算符,該運算符是 Python 3.x 中“/”和“//”的綜合版。對於 Python 2.x 中的“/”而言,它既是整除運算符,也是非整除運算符。規則如下:

  • 當兩個操作數都是整數時,Python 2.x 中的“/”就是整除運算符。
  • 當兩個操作數有一個是浮點數(或兩個都是浮點數)時,Python 2.x 中的“/”就是非整除運算符。


例如,在 Python 2.x 的交互式解釋執行器中執行如下代碼:

>>>print(5/2)
2
>>>print(5.0/2)
2.5
>>>print(5/2.0)
2.5
>>>print(5.0/2.0)
2.5

% 求余運算符

Python 不要求求余運算符的兩個操作數都是整數,Python 的求余運算符完全支持對浮點數求余。求余運算的結果不一定總是整數,它是使用第一個操作數來除以第二個操作數,得到一個整除的結果后剩下的值就是余數。

由於求余運算也需要進行除法運算,因此求余運算的第二個操作數不能是 0,否則程序會報出 ZeroDivisionError 錯誤。

例如如下程序:

  1. print("5%3的值為:", 5 % 3) # 輸出2
  2. print("5.2%3.1的值為:",5.2 % 3.1) # 輸出2.1
  3. print("-5.2%-3.1的值為:", -5.2 % -3.1) # 輸出-2.1
  4. print("5.2%-2.9的值為:", 5.2 % -2.9) # 輸出-0.6
  5. print("5.2%-1.5的值為:", 5.2 % -1.5) # 輸出-0.8
  6. print("-5.2%1.5的值為:", -5.2 % 1.5) # 輸出0.8
  7. #print("5對0.0求余的結果是:", 5 % 0.0) # 導致錯誤

這里需要注意的一點是,使用 % 求余,如果除數(第二個操作數)是負數,那么取得的結果也一定是負數。因此,運行上面程序,可以看到如下輸出結果:

5%3的值為: 2
5.2%3.1的值為: 2.1
-5.2%-3.1的值為: -2.1
5.2%-2.9的值為: -0.5999999999999996
5.2%-1.5的值為: -0.7999999999999998
-5.2%1.5的值為: 0.7999999999999998

前三個算式的運行結果比較簡單,它們進行的都是很簡單的求余計算。但 5.2 % -2.9 的結果有點奇怪,我們預計它為 -0.6,但實際輸出的是 -0.5999999999999996。這里有兩個問題:

  1. 第一個問題,為什么預計 5.2 % 2.9 的結果是 -0.6 呢?因為 Python 求余運算的邏輯是用被除數減去除數的 N 倍,此處的 N 是 -2,因此得到結果是 0.6。
  2. 第二個問題,為什么實際輸出的是 -0.5999999999999996 呢?這是由浮點數的存儲機制導致的。計算機底層的浮點數的存儲機制並不是精確保存每一個浮點數的值,讀者暫時不需要花太多的時間去理解浮點數的存儲機制,只要知道浮點數在 Python 中可能產生精度丟失的問題就行。比如此處正常計算的結果應該是 -0.6,但實際計算出來的結果是一個非常接近 -0.6 的值。

** 乘方運算符

Python 支持使用“**”作為乘方運算符,這是一個使用非常方便的運算符。由於開方其實是乘方的逆運算,因此實際上使用“**”也可進行開方運算。例如如下代碼:

  1. print('5 的 2 次方:', 5 ** 2) # 25
  2. print('4 的 3 次方:', 4 ** 3) # 64
  3. print('4 的開平方:', 4 ** 0.5) # 2.0
  4. print('27 的開 3 次方:',27 **(1 / 3 )) # 3.0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM