Skip to content

Python 运算符 ​

程序不仅要保存数据,还要对数据进行计算和判断。例如,一笔订单需要计算总价,再判断是否达到包邮条件:

python
price = 12.5
quantity = 4

total = price * quantity
is_free_shipping = total >= 50

print("订单金额:", total)
print("是否包邮:", is_free_shipping)

运行结果:

text
订单金额: 50.0
是否包邮: True

代码中的 * 和 >= 都是运算符。运算符可以完成计算、比较和条件组合,也可以判断某个内容是否存在、两个变量是否引用同一个对象。

Python 常见运算符类别总览图

算术运算符 ​

算术运算符用来完成加、减、乘、除等数字计算。

运算符作用示例结果
+加法10 + 2030
-减法10 - 20-10
*乘法10 * 20200
/除法10 / 200.5
//向下取整除法9 // 24
%取余数9 % 21
**幂运算2 ** 38

/ 的结果是浮点数。即使能够整除,结果也会带小数:

python
print(8 / 2)

运行结果:

text
4.0

// 和 % 经常配合使用。例如,把 135 分钟换算成小时和剩余分钟:

python
total_minutes = 135
hours = total_minutes // 60
minutes = total_minutes % 60

print("小时:", hours)
print("分钟:", minutes)

运行结果:

text
小时: 2
分钟: 15

// 是向下取整

// 不是简单去掉小数部分,而是把结果向更小的整数取整:

python
print(9 // 2)
print(-9 // 2)

运行结果:

text
4
-5

除法、向下整除与取余运算对比

+ 和 * 也能用于字符串:

python
course_name = "Python" + " 核心编程"

print(course_name)
print("-" * 20)

运行结果:

text
Python 核心编程
--------------------

数字和字符串支持的运算并不完全相同。使用运算符时,要同时关注两边的数据类型。

赋值运算符 ​

赋值运算符用于把值保存到变量中。= 是基本赋值,其他写法可以在原值的基础上完成计算并重新赋值。

运算符作用等效写法
=赋值score = 80
+=加后赋值score += 5 等效于 score = score + 5
-=减后赋值score -= 5 等效于 score = score - 5
*=乘后赋值score *= 2 等效于 score = score * 2
/=除后赋值score /= 2 等效于 score = score / 2
//=向下取整除后赋值score //= 2 等效于 score = score // 2
%=取余后赋值score %= 2 等效于 score = score % 2
**=幂运算后赋值score **= 2 等效于 score = score ** 2

下面用学习进度演示 += 和 -=:

python
progress = 30

progress += 20
print("完成练习后:", progress)

progress -= 10
print("修正统计后:", progress)

运行结果:

text
完成练习后: 50
修正统计后: 40

progress += 20 会先读取 progress 原来的值,完成加法,再把结果保存回同一个变量。

赋值和相等判断不同

= 表示赋值,== 才表示判断两个值是否相等:

python
score = 80
print(score == 80)

复合赋值运算符展开过程图

比较运算符 ​

比较运算符用来判断两个值之间的关系,结果一定是布尔值 True 或 False。

运算符作用示例结果
>大于80 > 60True
>=大于或等于60 >= 60True
<小于80 < 60False
<=小于或等于60 <= 60True
==等于80 == 60False
!=不等于80 != 60True

例如,判断成绩是否及格:

python
score = 75
is_passed = score >= 60

print("是否及格:", is_passed)

运行结果:

text
是否及格: True

数字可以比较大小,字符串也可以判断是否相等。比较不同类型的数据时,要先确认这种比较是否有明确含义。

逻辑运算符 ​

一个判断往往包含多个条件。逻辑运算符可以把这些条件组合起来。

运算符作用成立条件
and逻辑与两个条件都为 True
or逻辑或至少一个条件为 True
not逻辑非把 True 和 False 取反

例如,进入考试需要年龄达标,并且已经携带准考证:

python
age = 20
has_ticket = True

is_adult = age >= 18
can_enter = is_adult and has_ticket

print("是否可以进入考场:", can_enter)
print("是否未携带准考证:", not has_ticket)

运行结果:

text
是否可以进入考场: True
是否未携带准考证: False

再看 or。下面两个条件只要满足一个,就可以参加补考:

python
is_absent_with_leave = False
is_score_below_60 = True

can_take_makeup_exam = is_absent_with_leave or is_score_below_60
print("是否可以参加补考:", can_take_makeup_exam)

运行结果:

text
是否可以参加补考: True

and 和 or 不一定返回布尔值

当两边不是布尔值时,and 和 or 会按照真假规则选择并返回其中一个操作数,结果不一定是 True 或 False。

当前阶段优先用它们组合布尔值或比较表达式。后续遇到返回其他类型的写法时,再结合具体场景分析。

and、or、not 逻辑运算真值表

成员运算符 ​

成员运算符用来判断一个值是否包含在另一个对象中,结果也是布尔值。

运算符作用
in包含指定值时返回 True
not in不包含指定值时返回 True

先在字符串中查找内容:

python
course_name = "Python 核心编程"

print("Python" in course_name)
print("Java" not in course_name)
print("python" in course_name)

运行结果:

text
True
True
False

字符串区分大小写,因此小写的 "python" 不在 "Python 核心编程" 中。后面学习列表、元组、字典和集合时,还会继续使用 in 和 not in。

身份运算符 ​

== 判断两个对象保存的值是否相等,is 判断两个变量是否引用同一个对象。这是两种不同的问题。

运算符作用
is两个变量引用同一个对象时返回 True
is not两个变量引用的不是同一个对象时返回 True
python
student_a = ["小明", 18]
student_b = ["小明", 18]
student_c = student_a

print(student_a == student_b)
print(student_a is student_b)
print(student_a is student_c)

运行结果:

text
True
False
True

student_a 和 student_b 的内容相同,但它们是两个分别创建的列表。student_c 直接引用 student_a,所以二者指向同一个对象。

id() 可以查看对象的内存标识。每次运行得到的具体数字可能不同:

python
print(id(student_a))
print(id(student_b))
print(id(student_c))

不要用 is 判断值是否相等

判断数字、字符串或列表的值是否相等时,使用 ==。is 常用于判断一个值是不是 None:

python
result = None

print(result is None)
print(result is not None)

不要根据整数或字符串的缓存现象推断 is 的结果。

等值比较和身份判断的区别图

运算符优先级 ​

一个表达式中出现多个运算符时,Python 会按照优先级决定计算顺序。下面列出本节涉及的常见运算符,位置越靠上,优先级越高。

优先级运算符作用
高()括号中的表达式
**幂运算
+x、-x正号、负号
*、/、//、%乘、除、向下取整除、取余
+、-加、减
<、<=、>、>=、==、!=、in、not in、is、is not比较、成员和身份判断
not逻辑非
and逻辑与
低or逻辑或

例如:

python
result = 2 + 3 * 4
print(result)

乘法优先于加法,所以结果是 14。使用括号可以明确改变顺序:

python
result = (2 + 3) * 4
print(result)

这次会先计算括号中的加法,结果是 20。

复杂条件也建议主动使用括号:

python
score = 75
attendance = 0.9
has_makeup_task = False

is_qualified = score >= 60 and (attendance >= 0.8 or has_makeup_task)
print("是否通过考核:", is_qualified)

括号不仅能控制计算顺序,也能让条件之间的关系更容易阅读。无法快速判断优先级时,优先加括号表达意图。

运算符优先级和括号改变计算顺序的对比图

综合案例:课程考核 ​

现在用算术、比较和逻辑运算符完成一次课程考核。

考核规则如下:

  1. 理论成绩和实践成绩相加得到总分
  2. 总分不能低于 60 分
  3. 出勤率不能低于 80%
  4. 必须提交课程项目
python
theory_score = 42
practice_score = 45
attendance = 0.9
has_submitted_project = True

total_score = theory_score + practice_score
is_score_passed = total_score >= 60
is_attendance_passed = attendance >= 0.8
is_qualified = (
    is_score_passed
    and is_attendance_passed
    and has_submitted_project
)

print("总分:", total_score)
print("成绩达标:", is_score_passed)
print("出勤达标:", is_attendance_passed)
print("已提交项目:", has_submitted_project)
print("最终考核通过:", is_qualified)

运行结果:

text
总分: 87
成绩达标: True
出勤达标: True
已提交项目: True
最终考核通过: True

可以分别修改成绩、出勤率和项目提交状态,观察哪个条件会让最终结果变成 False。

练习 ​

  1. 写三个表达式,分别测试 +、// 和 % 的结果。
  2. 使用 in 和 not in 判断 "Python" 和 "Java" 是否出现在课程名称中。
  3. 创建两个内容相同的列表,分别使用 == 和 is 比较,并解释结果。
  4. 修改课程考核案例,让“总分达标或者完成补考任务”都可以满足成绩条件。

小结 ​

本节课最核心的是掌握 5 件事:

  1. 算术运算符负责计算,赋值运算符负责保存和更新结果
  2. 比较运算符产生布尔值,逻辑运算符负责组合多个条件
  3. in 判断是否包含,is 判断是否引用同一个对象
  4. 判断值是否相等使用 ==,判断是否为 None 可以使用 is
  5. 复杂表达式优先使用括号明确计算顺序