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

比较运算符和逻辑运算符

比较运算符也称为关系运算符,会产生布尔值 TrueFalse。逻辑运算符有三个: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