Python 算术运算符用于对数字执行诸如加法、减法、乘法、除法等数学运算。算术运算符是二元运算符,这意味着它们作用于两个操作数。Python 完全支持混合算术运算。也就是说,两个操作数可以是两种不同的数值类型。在这样的情况下:
类型的算术运算符
下面的表格列出了 Python 中所有可用的算术运算符:
运算符 |
名称 |
示例 |
+ |
加法 |
a + b = 30 |
- |
减法 |
a - b = -10 |
* |
乘法 |
a * b = 200 |
/ |
除法 |
b / a = 2 |
% |
取模 |
b % a = 0 |
** |
幂运算 |
a**b =10**20 |
// |
下取整除法 |
9//2 = 4 |
让我们通过例子来研究这些运算符。
加法运算符
加法运算符由 +
符号表示。它是一个基本的算术运算符。它将两侧的两个数值操作数相加并返回加法结果。
例子:添加两个整数
在下面的例子中,两个整数变量是 +
运算符的操作数。
a = 10
b = 20
print("加法运算:")
print("a =", a, "b =", b, "a + b =", a + b)
输出:
加法运算:
a = 10 b = 20 a + b = 30
例子:添加整数和浮点数
整数和浮点数相加的结果是一个浮点数。
a = 10
b = 20.5
print("加法运算:")
print("a =", a, "b =", b, "a + b =", a + b)
输出:
加法运算:
a = 10 b = 20.5 a + b = 30.5
例子:添加两个复数
浮点数加上复数的结果也是一个复数。
a = 10 + 5j
b = 20.5
print("加法运算:")
print("a =", a, "b =", b, "a + b =", a + b)
输出:
加法运算:
a = (10+5j) b = 20.5 a + b = (30.5+5j)
减法运算符
减法运算符由 -
符号表示。它从第一个操作数中减去第二个操作数。如果第二个操作数较大,结果的数是负数。
例子:减去两个整数
第一个例子展示了两个整数的减法。
a = 10
b = 20
print("减法运算:")
print("a =", a, "b =", b, "a - b =", a - b)
print("a =", a, "b =", b, "b - a =", b - a)
输出:
减法运算:
a = 10 b = 20 a - b = -10
a = 10 b = 20 b - a = 10
例子:减去整数和浮点数
整数和浮点数的减法遵循同样的原则。
a = 10
b = 20.5
print("减法运算:")
print("a =", a, "b =", b, "a - b =", a - b)
print("a =", a, "b =", b, "b - a =", b - a)
输出:
减法运算:
a = 10 b = 20.5 a - b = -10.5
a = 10 b = 20.5 b - a = 10.5
例子:减去复数
在涉及复数和浮点数的减法中,实部参与运算。
a = 10 + 5j
b = 20.5
print("减法运算:")
print("a =", a, "b =", b, "a - b =", a - b)
print("a =", a, "b =", b, "b - a =", b - a)
输出:
减法运算:
a = (10+5j) b = 20.5 a - b = (-10.5+5j)
a = (10+5j) b = 20.5 b - a = (10.5-5j)
乘法运算符
在 Python 中(就像许多语言中一样),*
(星号)符号定义为乘法运算符。它返回两侧的两个操作数的乘积。如果任何一个操作数是负数,结果也是负数。如果两者都是负数,结果是正数。改变操作数的顺序不会改变结果。
例子:乘以两个整数
a = 10
b = 20
print("乘法运算:")
print("a =", a, "b =", b, "a * b =", a * b)
输出:
乘法运算:
a = 10 b = 20 a * b = 200
例子:乘以整数和浮点数
在乘法中,浮点操作数可以有标准的小数点表示法或科学记数法。
a = 10
b = 20.5
print("乘法运算:")
print("a =", a, "b =", b, "a * b =", a * b)
a = -5.55
b = 6.75e-3
print("乘法运算:")
print("a =", a, "b =", b, "a * b =", a * b)
输出:
乘法运算:
a = 10 b = 20.5 a * b = 205.0
乘法运算:
a = -5.55 b = 0.00675 a * b = -0.037462499999999996
例子:乘以复数
对于涉及一个复数操作数的乘法操作,另一个操作数会分别与复数的实部和虚部相乘。
a = 10 + 5j
b = 20.5
print("乘法运算:")
print("a =", a, "b =", b, "a * b =", a * b)
输出:
乘法运算:
a = (10+5j) b = 20.5 a * b = (205+102.5j)
除法运算符
/
符号通常被称为前斜杠。除法运算符的结果是分子(左操作数)除以分母(右操作数)。如果任何操作数是负数,结果的数也是负数。由于无法存储无穷大,如果分母为 0,Python 会抛出 ZeroDivisionError
。
在 Python 中,除法运算符的结果总是浮点数,即使两个操作数都是整数。
例子:除以两个数
a = 10
b = 20
print("除法运算:")
print("a =", a, "b =", b, "a / b =", a / b)
print("a =", a, "b =", b, "b / a =", b / a)
输出:
除法运算:
a = 10 b = 20 a / b = 0.5
a = 10 b = 20 b / a = 2.0
例子:除以两个浮点数
在除法中,浮点操作数可以有标准的小数点表示法或科学记数法。
a = 10
b = -20.5
print("除法运算:")
print("a =", a, "b =", b, "a / b =", a / b)
a = -2.50
b = 1.25e2
print("除法运算:")
print("a =", a, "b =", b, "a / b =", a / b)
输出:
除法运算:
a = 10 b = -20.5 a / b = -0.4878048780487805
除法运算:
a = -2.5 b = 125.0 a / b = -0.02
例子:除以复数
当其中一个操作数是复数时,另一个操作数会与复数的实部和虚部进行除法运算。
a = 7.5 + 7.5j
b = 2.5
print("除法运算:")
print("a =", a, "b =", b, "a / b =", a / b)
print("a =", a, "b =", b, "b / a =", b / a)
输出:
除法运算:
a = (7.5+7.5j) b = 2.5 a / b = (3+3j)
a = (7.5+7.5j) b = 2.5 b / a = (0.16666666666666666-0.16666666666666666j)
如果分子为 0,除法的结果总是 0,除了当分母为 0 时,Python 会抛出带有 “除以零” 错误信息的 ZeroDivisionError
。
a = 0
b = 2.5
print("除法运算:")
print("a =", a, "b =", b, "a / b =", a / b)
print("a =", a, "b =", b, "b / a =", b / a)
输出:
除法运算:
a = 0 b = 2.5 a / b = 0.0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: float division by zero
取模运算符
Python 定义 %
符号,通常称为百分号,为取模(或模数)运算符。它返回分母除以分子后的余数。也可以称之为余数运算符。取模运算符的结果是在整数商之后剩下的数。举个例子,当 10 除以 3 时,商是 3 余数是 1。因此,10 % 3
(通常读作 10 模 3)的结果是 1。
例子:对整数进行取模运算
如果两个操作数都是整数,取模的值也是一个整数。如果分子完全可被整除,余数为 0。如果分子小于分母,取模等于分子。如果分母为 0,Python 抛出 ZeroDivisionError
。
a = 10
b = 2
print("取模运算:")
print("a =", a, "b =", b, "a % b =", a % b)
a = 10
b = 4
print("取模运算:")
print("a =", a, "b =", b, "a % b =", a % b)
print("a =", a, "b =", b, "b % a =", b % a)
a = 0
b = 10
print("取模运算:")
print("a =", a, "b =", b, "a % b =", a % b)
print("a =", a, "b =", b, "b % a =", b % a)
输出:
取模运算:
a = 10 b = 2 a % b = 0
取模运算:
a = 10 b = 4 a % b = 2
a = 10 b = 4 b % a = 4
取模运算:
a = 0 b = 10 a % b = 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: integer modulo by zero
例子:对浮点数进行取模运算
如果任意一个操作数是浮点数,取模值总是浮点数。
a = 10
b = 2.5
print("取模运算:")
print("a =", a, "b =", b, "a % b =", a % b)
a = 10
b = 1.5
print("取模运算:")
print("a =", a, "b =", b, "a % b =", a % b)
a = 7.7
b = 2.5
print("取模运算:")
print("a =", a, "b =", b, "a % b =", a % b)
a = 12.4
b = 3
print("取模运算:")
print("a =", a, "b =", b, "a % b =", a % b)
输出:
取模运算:
a = 10 b = 2.5 a % b = 0.0
取模运算:
a = 10 b = 1.5 a % b = 1.0
取模运算:
a = 7.7 b = 2.5 a % b = 0.20000000000000018
取模运算:
a = 12.4 b = 3 a % b = 0.40000000000000036
Python 不接受复数作为取模运算的操作数。它会抛出 TypeError: unsupported operand type(s) for %
。
幂运算符
Python 使用 **
(双星号)作为幂运算符(有时称为次方运算符)。因此,对于 a ** b
,你说 a 的 b 次方,或者 b 的 a 次方。
如果在指数表达式中,两个操作数都是整数,结果也是一个整数。如果其中一个是浮点数,结果是浮点数。同样地,如果任一操作数是复数,幂运算符返回一个复数。
如果基数是 0,结果是 0,如果指数是 0 则结果总是 1。
幂运算符示例
a = 10
b = 2
print("a=", a, "b=", b, "a**b=", a ** b)
a = 10
b = 1.5
print("a=", a, "b=", b, "a**b=", a ** b)
a = 7.7
b = 2
print("a=", a, "b=", b, "a**b=", a ** b)
a = 1 + 2j
b = 4
print("a=", a, "b=", b, "a**b=", a ** b)
a = 12.4
b = 0
print("a=", a, "b=", b, "a**b=", a ** b)
print("a=", a, "b=", b, "b**a=", b ** a)
上述代码会产生如下输出:
a= 10 b= 2 a**b= 100
a= 10 b= 1.5 a**b= 31.622776601683793
a= 7.7 b= 2 a**b= 59.290000000000006
a= (1+2j) b= 4 a**b= (-7-24j)
a= 12.4 b= 0 a**b= 1.0
a= 12.4 b= 0 b**a= 0.0
下取整除法运算符
下取整除法也被称为整数除法。Python 使用 //
(双斜杠)符号为此目的服务。不同于取模或模数运算符返回余数,下取整除法给出的是涉及操作数的除法的商。
如果两个操作数都是正数,下取整运算符返回一个去除了小数部分的数。例如,9.8 除以 2 的下取整除法返回 4(纯除法是 4.9,去掉小数部分,结果是 4)。
但如果有一个操作数是负数,结果则向远离零的方向舍入(朝向负无穷)。-9.8 除以 2 的下取整除法返回 -5(纯除法是 -4.9,向远离 0 的方向舍入)。
下取整除法运算符示例
a = 9
b = 2
print("a=", a, "b=", b, "a//b=", a // b)
a = 9
b = -2
print("a=", a, "b=", b, "a//b=", a // b)
a = 10
b = 1.5
print("a=", a, "b=", b, "a//b=", a // b)
a = -10
b = 1.5
print("a=", a, "b=", b, "a//b=", a // b)
上述代码会产生如下输出:
a= 9 b= 2 a//b= 4
a= 9 b= -2 a//b= -5
a= 10 b= 1.5 a//b= 6.0
a= -10 b= 1.5 a//b= -7.0
算术运算符的优先级和结合性
运算符(s) |
描述 |
结合性 |
** |
幂运算符 |
幂运算符的结合性是从右到左。 |
% , * , / , // |
取模、乘法、除法、下取整除法 |
取模、乘法、除法、下取整除法运算符的结合性是从左到右。 |
+ , - |
加法和减法运算符 |
加法和减法运算符的结合性是从左到右。 |
下表显示了 Python 中算术运算符的优先级和结合性。
带有复数的算术运算符
当两个操作数都是复数对象时,算术运算符的行为略有不同。
复数的加法和减法
复数的加法和减法是对各自的实部和虚部进行简单的加法或减法。
a = 2.5 + 3.4j
b = -3 + 1.0j
print("Addition of complex numbers - a=", a, "b=", b, "a+b=", a + b)
print("Subtraction of complex numbers - a=", a, "b=", b, "a-b=", a - b)
上述代码会产生如下输出:
Addition of complex numbers - a= (2.5+3.4j) b= (-3+1j) a+b= (-0.5+4.4j)
Subtraction of complex numbers - a= (2.5+3.4j) b= (-3+1j) a-b= (5.5+2.4j)
复数的乘法
复数的乘法类似于代数中两个二项式的乘法。如果 "a+bj" 和 "x+yj" 是两个复数,那么它们的乘法由以下公式给出:
(a+bj) * (x+yj) = ax + ayj + xbj + byj² = (ax - by) + (ay + xb)j
例如,
a = 6 + 4j
b = 3 + 2j
c = a * b
c = (18 - 8) + (12 + 12)j
c = 10 + 24j
下面的程序确认了这个结果:
a = 6 + 4j
b = 3 + 2j
print("Multplication of complex numbers - a=", a, "b=", b, "a*b=", a * b)
复数的除法
要除以两个复数,需要将分子以及分母都乘以分母的共轭。
a = 6 + 4j
b = 3 + 2j
c = a / b
c = (6 + 4j) / (3 + 2j)
c = (6 + 4j) * (3 - 2j) / (3 + 2j) * (3 - 2j)
c = (18 - 12j + 12j + 8) / (9 - 6j + 6j + 4)
c = 26 / 13
c = 2 + 0j
为了验证,运行以下代码:
a = 6 + 4j
b = 3 + 2j
print("Division of complex numbers - a=", a, "b=", b, "a/b=", a / b)
注意
Python 的 complex
类不支持取模运算符 %
和下取整除法运算符 //
。