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 FalseFalse
or 逻辑或 True or FalseTrue
not 逻辑非 not TrueFalse

真值表

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 的 andor 有"短路"特性:

# 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 = 310 // -3 = -4

Python 的整除是向下取整,不是截断。

  • 10 / 3 = 3.333...,向下取整 → 3
  • 10 / -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种方式到底用哪个?


参考资料

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐