算術運算符也即數學運算符,用來對數字進行數學運算,比如加減乘除。下表列出了?Python?支持所有基本算術運算符。
運算符 | 說明 | 實例 | 結果 |
---|---|---|---|
+ | 加 | 12.45 + 15 | 27.45 |
- | 減 | 4.56 - 0.26 | 4.3 |
* | 乘 | 5 * 3.6 | 18.0 |
/ | 除法(和數學中的規則一樣) | 7 / 2 | 3.5 |
// | 整除(只保留商的整數部分) | 7 // 2 | 3 |
% | 取余,即返回除法的余數 | 7 % 2 | 1 |
** | 冪運算/次方運算,即返回 x 的 y 次方 | 2 ** 4 | 16,即 24 |
接下來將對表 1 中各個算術運算符的用法逐一講解。
+ 加法運算符
加法運算符很簡單,和數學中的規則一樣,請看下面的代碼:
m = 10n = 97sum1 = m + nx = 7.2y = 15.3sum2 = x + yprint("sum1=%d, sum2=%.2f" % (sum1, sum2) )
運行結果:
sum1=107, sum2=22.50
拼接字符串
當+
用于數字時表示加法,但是當+
用于字符串時,它還有拼接字符串(將兩個字符串連接為一個)的作用,請看代碼:
name = "C語言中文網"url = "http://c.biancheng.net/"age = 8info = name + "的網址是" + url + ",它已經" + str(age) + "歲了。"print(info)
運行結果:
C語言中文網的網址是http://c.biancheng.net/,它已經8歲了。
str() 函數用來將整數類型的 age 轉換成字符串。
- 減法運算符
減法運算也和數學中的規則相同,請看代碼:
n = 45m = -nx = -83.5y = -xprint(m, ",", y)
運行結果:
-45 , 83.5
求負
-
除了可以用作減法運算之外,還可以用作求負運算(正數變負數,負數變正數),請看下面的代碼:
n = 45n_neg = -nf = -83.5f_neg = -fprint(n_neg, ",", f_neg)
運行結果:
-45 , 83.5注意,單獨使用+
是無效的,不會改變數字的值,例如:
n = 45m = +nx = -83.5y = +xprint(m, ",", y)
運行結果:
45 , -83.5
*乘法運算符
乘法運算也和數學中的規則相同,請看代碼:
n = 4 * 25f = 34.5 * 2print(n, ",", f)
運行結果:
100 , 69.0
重復字符串
*
除了可以用作乘法運算,還可以用來重復字符串,也即將 n 個同樣的字符串連接起來,請看代碼:
str1 = "hello "print(str1 * 4)
運行結果:
hello hello hello hello?
/ 和 // 除法運算符
Python 支持/
和//
兩個除法運算符,但它們之間是有區別的:
/
表示普通除法,使用它計算出來的結果和數學中的計算結果相同。//
表示整除,只保留結果的整數部分,舍棄小數部分;注意是直接丟掉小數部分,而不是四舍五入。
請看下面的例子:
#整數不能除盡print("23/5 =", 23/5)print("23//5 =", 23//5)print("23.0//5 =", 23.0//5)print("-------------------")#整數能除盡print("25/5 =", 25/5)print("25//5 =", 25//5)print("25.0//5 =", 25.0//5)print("-------------------")#小數除法print("12.4/3.5 =", 12.4/3.5)print("12.4//3.5 =", 12.4//3.5)
運行結果:
23/5 = 4.6
23//5 = 4
23.0//5 = 4.0
-------------------
25/5 = 5.0
25//5 = 5
25.0//5 = 5.0
-------------------
12.4/3.5 = 3.542857142857143
12.4//3.5 = 3.0
從運行結果可以發現:
/
的計算結果總是小數,不管是否能除盡,也不管參與運算的是整數還是小數。當有小數參與運算時,
//
結果才是小數,否則就是整數。
需要注意的是,除數始終不能為 0,除以 0 是沒有意義的,這將導致 ZeroDivisionError 錯誤。在某些編程語言中,除以 0 的結果是無窮大(包括正無窮大和負無窮大)。
Python 2.x 中的除法
Python 2.x 只提供了一種除法運算,就是/
,它的行為和大部分編程語言中/
的行為是一樣的:
當
/
兩邊都是整數時,結果始終是整數;如果不能除盡,就直接舍棄小數部分。當
/
兩邊有一個是小數時,結果始終是小數;如果恰好除盡,小數部分就是 0。
請看下面的代碼:
#整數除法print "18/6 =", 18/6print "47/7 =", 47/7print "----------------"#小數除法print "18.0/6 =", 18.0/6print "47.0/7 =", 47.0/7print "29.5/4.2 =", 29.5/4.2
運行結果:
18/6 = 3
47/7 = 6
----------------
18.0/6 = 3.0
47.0/7 = 6.71428571429
29.5/4.2 = 7.02380952381
你可以將 Python 2.x 中的/
看作 Python 3.x 中/
和//
的結合體,因為 Python 2.x 中/
的行為有點奇怪,所以 Python 3.x 增加了//
運算符,用以規范除法運算的行為。
% 求余運算符
Python % 運算符用來求得兩個數相除的余數,包括整數和小數。Python 使用第一個數字除以第二個數字,得到一個整數的商,剩下的值就是余數。對于小數,求余的結果一般也是小數。注意,求余運算的本質是除法運算,所以第二個數字也不能是 0,否則會導致 ZeroDivisionError 錯誤。Python % 使用示例:
print("-----整數求余-----")print("15%6 =", 15%6)print("-15%6 =", -15%6)print("15%-6 =", 15%-6)print("-15%-6 =", -15%-6)print("-----小數求余-----")print("7.7%2.2 =", 7.7%2.2)print("-7.7%2.2 =", -7.7%2.2)print("7.7%-2.2 =", 7.7%-2.2)print("-7.7%-2.2 =", -7.7%-2.2)print("---整數和小數運算---")print("23.5%6 =", 23.5%6)print("23%6.5 =", 23%6.5)print("23.5%-6 =", 23.5%-6)print("-23%6.5 =", -23%6.5)print("-23%-6.5 =", -23%-6.5)
運行結果:
-----整數求余-----
15%6 = 3
-15%6 = 3
15%-6 = -3
-15%-6 = -3
-----小數求余-----
7.7%2.2 = 1.0999999999999996
-7.7%2.2 = 1.1000000000000005
7.7%-2.2 = -1.1000000000000005
-7.7%-2.2 = -1.0999999999999996
---整數和小數運算---
23.5%6 = 5.5
23%6.5 = 3.5
23.5%-6 = -0.5
-23%6.5 = 3.0
-23%-6.5 = -3.5
從運行結果可以發現兩點:
只有當第二個數字是負數時,求余的結果才是負數。換句話說,求余結果的正負和第一個數字沒有關系,只由第二個數字決定。
%
兩邊的數字都是整數時,求余的結果也是整數;但是只要有一個數字是小數,求余的結果就是小數。
本例中小數求余的四個結果都不精確,而是近似值,這和小數在底層的存儲有關系,有興趣的讀者請猛擊《小數在內存中是如何存儲的,揭秘諾貝爾獎級別的設計(長篇神文)》了解更多。
** 次方(乘方)運算符
Python ** 運算符用來求一個 x 的 y 次方,也即次方(乘方)運算符。由于開方是次方的逆運算,所以也可以使用 ** 運算符間接地實現開方運算。Python ** 運算符示例:
print('----次方運算----')print('3**4 =', 3**4)print('2**5 =', 2**5)print('----開方運算----')print('81**(1/4) =', 81**(1/4))print('32**(1/5) =', 32**(1/5))
運行結果:
----次方運算----
3**4 = 81
2**5 = 32
----開方運算----
81**(1/4) = 3.0
32**(1/5) = 2.0