Python运算符:算术、比较、逻辑运算,一篇讲透,外加一个计算器
·
Python运算符:算术、比较、逻辑运算,一篇讲透,外加一个计算器
上一篇文章讲了数据类型,这篇文章讲数据类型怎么运算。数字怎么加减乘除?两个字符串能不能相加?比较大小用什么符号?这篇文章全部讲清楚。
一句话概括
这篇文章解决一个问题:掌握 Python 所有运算符,特别是算术运算、比较运算和逻辑运算。
算术运算符
基本算术运算
| 运算符 | 说明 | 示例 | 结果 |
|---|---|---|---|
+ |
加法 | 10 + 3 |
13 |
- |
减法 | 10 - 3 |
7 |
* |
乘法 | 10 * 3 |
30 |
/ |
除法 | 10 / 3 |
3.333... |
// |
整除 | 10 // 3 |
3 |
% |
取余 | 10 % 3 |
1 |
** |
幂运算 | 10 ** 3 |
1000 |
重点:整除 // vs 除法 /
print(10 / 3) # 3.3333333333333335(总是返回浮点数)
print(10 // 3) # 3(向下取整,返回整数)
print(-10 // 3) # -4(向下取整,-3.33...取整是-4,不是-3)
什么时候用哪个?
- 分东西(每个人分多少)用
/,可能有余数 - 数数(能分成几组)用
//,算能分几组
取余 % 的妙用
# 判断奇偶数
num = 15
if num % 2 == 0:
print("偶数")
else:
print("奇数")
# 判断闰年
year = 2024
if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
print("闰年")
else:
print("平年")
# 数字反转(字符串反转的思路)
n = 12345
reversed_num = 0
while n > 0:
reversed_num = reversed_num * 10 + n % 10
n //= 10
print(reversed_num) # 54321
比较运算符
比较运算返回布尔值(True 或 False)。
| 运算符 | 说明 | 示例 | 结果 |
|---|---|---|---|
== |
等于 | 10 == 10 |
True |
!= |
不等于 | 10 != 3 |
True |
> |
大于 | 10 > 3 |
True |
< |
小于 | 10 < 3 |
False |
>= |
大于等于 | 10 >= 10 |
True |
<= |
小于等于 | 10 <= 3 |
False |
⚠️ 容易犯的错误:== 和 = 分不清
# 错误!这是赋值,不是比较
if x = 10: # 语法错误!
# 正确:这是比较
if x == 10:
print("x等于10")
小技巧:可以把 == 读成"等于",把 = 读成"赋值/是"。
字符串比较
字符串比较是按字典序(ASCII码)来的:
print("apple" < "banana") # True(a < b)
print("Hello" == "hello") # False(大小写不同)
print("10" < "9") # True("1"的ASCII码小于"9")
逻辑运算符
逻辑运算符用于组合多个条件。
| 运算符 | 说明 | 示例 |
|---|---|---|
and |
逻辑与 | True and False → False |
or |
逻辑或 | True or False → True |
not |
逻辑非 | not True → False |
真值表
and(两边都为True才为True):
True and True # True
True and False # False
False and True # False
False and False # False
or(任意一边为True就为True):
True or True # True
True or False # True
False or True # True
False or False # False
not(取反):
not True # False
not False # True
短路求值
Python 的 and 和 or 有"短路"特性:
# and:左边是False,右边不用看了,直接返回左边
print(False and something_that_would_error) # 不会报错,返回False
# or:左边是True,右边不用看了,直接返回左边
print(True or something_that_would_error) # 不会报错,返回True
组合使用
age = 25
income = 5000
if age >= 18 and income >= 3000:
print("可以申请信用卡")
if age < 18 or income < 3000:
print("不符合申请条件")
赋值运算符
最基础的赋值运算符是 =,但还有一些复合赋值运算符:
| 运算符 | 等价于 | 示例 |
|---|---|---|
+= |
x = x + y |
x += 3 |
-= |
x = x - y |
x -= 3 |
*= |
x = x * y |
x *= 3 |
/= |
x = x / y |
x /= 3 |
//= |
x = x // y |
x //= 3 |
%= |
x = x % y |
x %= 3 |
**= |
x = x ** y |
x **= 2 |
x = 10
x += 5 # x = 15
x *= 2 # x = 30
x -= 10 # x = 20
位运算符(进阶)
如果你需要处理二进制数据,这些会用到。了解即可。
| 运算符 | 说明 | 示例 |
|---|---|---|
& |
按位与 | 5 & 3 = 1 |
| |
按位或 | 5 | 3 = 7 |
^ |
按位异或 | 5 ^ 3 = 6 |
~ |
按位取反 | ~5 = -6 |
<< |
左移 | 5 << 1 = 10 |
>> |
右移 | 5 >> 1 = 2 |
# 二进制表示
print(bin(5)) # 0b101
print(bin(3)) # 0b011
# 按位与:只有对应位都是1才为1
# 101
# & 011
# = 001 = 1
print(5 & 3) # 1
# 左移:二进制往左移一位,相当于乘2
print(5 << 1) # 10(二进制101变成1010)
运算符优先级
当一个表达式里有多个运算符时,Python 按优先级从高到低执行:
| 优先级(高→低) | 运算符 |
|---|---|
| 1 | ** |
| 2 | * / // % |
| 3 | + - |
| 4 | > < >= <= |
| 5 | == != |
| 6 | and |
| 7 | or |
建议:记不住就用括号。括号优先级最高,而且让代码更易读。
# 不用括号
result = 2 + 3 * 4 # 14(先算乘法)
# 用括号更清晰
result = 2 + (3 * 4) # 14
# 完全不同的结果
result = (2 + 3) * 4 # 20
实战:科学计算器
综合运用所有运算符,写一个带优先级的计算器:
def calculate(a, b, operator):
"""根据运算符计算结果"""
if operator == "+":
return a + b
elif operator == "-":
return a - b
elif operator == "*":
return a * b
elif operator == "/":
if b == 0:
return "错误:除数不能为0"
return a / b
elif operator == "//":
if b == 0:
return "错误:除数不能为0"
return a // b
elif operator == "%":
return a % b
elif operator == "**":
return a ** b
else:
return "错误:不支持的运算符"
# 测试用例
tests = [
(10, 3, "+"),
(10, 3, "-"),
(10, 3, "*"),
(10, 3, "/"),
(10, 3, "//"),
(10, 3, "%"),
(10, 3, "**"),
(2, 3, "**"),
]
print("=" * 40)
print(f"{'a':>5} {'op':>5} {'b':>5} = {'结果':>10}")
print("=" * 40)
for a, op, b in tests:
result = calculate(a, b, op)
print(f"{a:>5} {op:>5} {b:>5} = {result:>10}")
输出:
========================================
a op b = 结果
========================================
10 + 3 = 13
10 - 3 = 7
10 * 3 = 30
10 / 3 = 3.3333333333333335
10 // 3 = 3
10 % 3 = 1
10 ** 3 = 1000
2 ** 3 = 8
========================================
常见问题FAQ
Q1:为什么 10 // 3 = 3 但 10 // -3 = -4?
Python 的整除是向下取整,不是截断。
10 / 3 = 3.333...,向下取整 →310 / -3 = -3.333...,向下取整 →-4
向下取整的意思是:往数轴的负方向取整。-3.333 离 -4 更近。
Q2:1 < x < 10 这种写法对吗?
对的。这是 Python 的链式比较,等价于 1 < x and x < 10。
x = 5
print(1 < x < 10) # True
print(1 < x < 3) # False
Q3:Python 有没有三元运算符?
有的,但写法和其他语言不太一样:
# 其他语言:x ? a : b
# Python:
result = "yes" if x > 10 else "no"
Q4:逻辑运算符和比较运算符的优先级谁更高?
比较运算符优先级高于逻辑运算符:
x = 5
result = x > 3 and x < 10
# 等价于 (x > 3) and (x < 10)
写在最后
这篇文章覆盖了 Python 所有常用运算符:
- 算术运算符:+ - * / // % **
- 比较运算符:== != > < >= <=
- 逻辑运算符:and or not
- 赋值运算符:= += -= *= /= //= %= **=
下一篇文章讲字符串格式化输出——f-string、format()、%格式化,3种方式到底用哪个?
参考资料:
更多推荐


所有评论(0)