6. 运算符
有了变量和运算符,我们就可以构造各种各样的表达式来解决实际问题。表达式由常量、变量、函数和运算符组合而成,编程语言对其进行解释和计算以得到另一个值。
运算符优先级(从高到低)
| 优先级 | 运算符 | 说明 |
|---|---|---|
| 最高 | [] [:] | 索引 / 切片 |
** | 幂 | |
~ + - | 按位取反 / 正号、负号 | |
* / % // | 乘 / 除 / 模 / 整除 | |
+ - | 加 / 减 | |
>> << | 右移 / 左移 | |
& | 按位与 | |
^ | 按位异或 | |
| | 按位或 | |
<= < > >= | 小于等于、小于、大于、大于等于 | |
== != | 等于 / 不等于 | |
is / is not | 身份运算符 | |
in / not in | 成员运算符 | |
not | 逻辑非 | |
and | 逻辑与 | |
or | 逻辑或 | |
| 最低 | = += -= *= /= %= //= **= &= |= ^= >>= <<= | 赋值运算符 |
💡 记不住优先级时,用圆括号(小括号)来确保运算的执行顺序。
算术运算符
python
print(1 + 2) # 3 —— 加法
print(2 - 1) # 1 —— 减法
print(2 * 3) # 6 —— 乘法
print(5 / 2) # 2.5 —— 除法(结果始终为浮点数)
print(5 // 2) # 2 —— 整除(向下取整)
print(5 % 2) # 1 —— 求模(取余)
print(5 ** 2) # 25 —— 幂运算
▶ 运行结果:
输出
3
1
6
2.5
2
1
25
🌾 趣味数学:国际象棋与麦粒
根据古波斯文献记载,国际象棋最早由印度宰相西萨·班·达依尔发明。印度舍罕王决定重赏发明者。西萨提出的奖赏看似微不足道:
在棋盘的第 1 格放 1 粒麦子,第 2 格放 2 粒,第 3 格放 4 粒,依此类推,每一格的麦粒数都是前一格的两倍,直至填满 64 格。
请同学们思考:一共需要多少粒麦子?
赋值运算符
赋值运算符将右边的值赋给左边的变量。赋值运算符还可以跟算术运算符组合成复合赋值运算符。Python 3.8 引入了一个新的赋值运算符 :=,称为海象运算符(长得像海象的獠牙 🦭),它可以在表达式内部为变量赋值:
python
a = 10
b = 3
a += b # 相当于:a = a + b
a *= a + 2 # 相当于:a = a * (a + 2)
print(a) # 大家算一下这里会输出什么
▶ 运行结果:
输出
195
比较运算符和逻辑运算符
比较运算符也称为关系运算符,会产生布尔值 True 或 False。逻辑运算符有三个:and(与)、or(或)和not(非)。
python
flag0 = 1 == 1 # True
flag1 = 3 > 2 # True
flag2 = 2 < 1 # False
flag3 = flag1 and flag2 # False —— 两边都为 True 才为 True
flag4 = flag1 or flag2 # True —— 一边为 True 即为 True
flag5 = not flag0 # False —— 取反
print('flag0 =', flag0) # flag0 = True
print('flag1 =', flag1) # flag1 = True
print('flag2 =', flag2) # flag2 = False
print('flag3 =', flag3) # flag3 = False
print('flag4 =', flag4) # flag4 = True
print('flag5 =', flag5) # flag5 = False
print(flag1 and not flag2) # True
print(1 > 2 or 2 == 3) # False
▶ 运行结果:
输出
flag0 = True
flag1 = True
flag2 = False
flag3 = False
flag4 = True
flag5 = False
True
False