Python 运算符
程序不仅要保存数据,还要对数据进行计算和判断。例如,一笔订单需要计算总价,再判断是否达到包邮条件:
price = 12.5
quantity = 4
total = price * quantity
is_free_shipping = total >= 50
print("订单金额:", total)
print("是否包邮:", is_free_shipping)运行结果:
订单金额: 50.0
是否包邮: True代码中的 * 和 >= 都是运算符。运算符可以完成计算、比较和条件组合,也可以判断某个内容是否存在、两个变量是否引用同一个对象。
算术运算符
算术运算符用来完成加、减、乘、除等数字计算。
| 运算符 | 作用 | 示例 | 结果 |
|---|---|---|---|
+ | 加法 | 10 + 20 | 30 |
- | 减法 | 10 - 20 | -10 |
* | 乘法 | 10 * 20 | 200 |
/ | 除法 | 10 / 20 | 0.5 |
// | 向下取整除法 | 9 // 2 | 4 |
% | 取余数 | 9 % 2 | 1 |
** | 幂运算 | 2 ** 3 | 8 |
/ 的结果是浮点数。即使能够整除,结果也会带小数:
print(8 / 2)运行结果:
4.0// 和 % 经常配合使用。例如,把 135 分钟换算成小时和剩余分钟:
total_minutes = 135
hours = total_minutes // 60
minutes = total_minutes % 60
print("小时:", hours)
print("分钟:", minutes)运行结果:
小时: 2
分钟: 15// 是向下取整
// 不是简单去掉小数部分,而是把结果向更小的整数取整:
print(9 // 2)
print(-9 // 2)运行结果:
4
-5+ 和 * 也能用于字符串:
course_name = "Python" + " 核心编程"
print(course_name)
print("-" * 20)运行结果:
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 |
下面用学习进度演示 += 和 -=:
progress = 30
progress += 20
print("完成练习后:", progress)
progress -= 10
print("修正统计后:", progress)运行结果:
完成练习后: 50
修正统计后: 40progress += 20 会先读取 progress 原来的值,完成加法,再把结果保存回同一个变量。
赋值和相等判断不同
= 表示赋值,== 才表示判断两个值是否相等:
score = 80
print(score == 80)比较运算符
比较运算符用来判断两个值之间的关系,结果一定是布尔值 True 或 False。
| 运算符 | 作用 | 示例 | 结果 |
|---|---|---|---|
> | 大于 | 80 > 60 | True |
>= | 大于或等于 | 60 >= 60 | True |
< | 小于 | 80 < 60 | False |
<= | 小于或等于 | 60 <= 60 | True |
== | 等于 | 80 == 60 | False |
!= | 不等于 | 80 != 60 | True |
例如,判断成绩是否及格:
score = 75
is_passed = score >= 60
print("是否及格:", is_passed)运行结果:
是否及格: True数字可以比较大小,字符串也可以判断是否相等。比较不同类型的数据时,要先确认这种比较是否有明确含义。
逻辑运算符
一个判断往往包含多个条件。逻辑运算符可以把这些条件组合起来。
| 运算符 | 作用 | 成立条件 |
|---|---|---|
and | 逻辑与 | 两个条件都为 True |
or | 逻辑或 | 至少一个条件为 True |
not | 逻辑非 | 把 True 和 False 取反 |
例如,进入考试需要年龄达标,并且已经携带准考证:
age = 20
has_ticket = True
is_adult = age >= 18
can_enter = is_adult and has_ticket
print("是否可以进入考场:", can_enter)
print("是否未携带准考证:", not has_ticket)运行结果:
是否可以进入考场: True
是否未携带准考证: False再看 or。下面两个条件只要满足一个,就可以参加补考:
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)运行结果:
是否可以参加补考: Trueand 和 or 不一定返回布尔值
当两边不是布尔值时,and 和 or 会按照真假规则选择并返回其中一个操作数,结果不一定是 True 或 False。
当前阶段优先用它们组合布尔值或比较表达式。后续遇到返回其他类型的写法时,再结合具体场景分析。
成员运算符
成员运算符用来判断一个值是否包含在另一个对象中,结果也是布尔值。
| 运算符 | 作用 |
|---|---|
in | 包含指定值时返回 True |
not in | 不包含指定值时返回 True |
先在字符串中查找内容:
course_name = "Python 核心编程"
print("Python" in course_name)
print("Java" not in course_name)
print("python" in course_name)运行结果:
True
True
False字符串区分大小写,因此小写的 "python" 不在 "Python 核心编程" 中。后面学习列表、元组、字典和集合时,还会继续使用 in 和 not in。
身份运算符
== 判断两个对象保存的值是否相等,is 判断两个变量是否引用同一个对象。这是两种不同的问题。
| 运算符 | 作用 |
|---|---|
is | 两个变量引用同一个对象时返回 True |
is not | 两个变量引用的不是同一个对象时返回 True |
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)运行结果:
True
False
Truestudent_a 和 student_b 的内容相同,但它们是两个分别创建的列表。student_c 直接引用 student_a,所以二者指向同一个对象。
id() 可以查看对象的内存标识。每次运行得到的具体数字可能不同:
print(id(student_a))
print(id(student_b))
print(id(student_c))不要用 is 判断值是否相等
判断数字、字符串或列表的值是否相等时,使用 ==。is 常用于判断一个值是不是 None:
result = None
print(result is None)
print(result is not None)不要根据整数或字符串的缓存现象推断 is 的结果。
运算符优先级
一个表达式中出现多个运算符时,Python 会按照优先级决定计算顺序。下面列出本节涉及的常见运算符,位置越靠上,优先级越高。
| 优先级 | 运算符 | 作用 |
|---|---|---|
| 高 | () | 括号中的表达式 |
** | 幂运算 | |
+x、-x | 正号、负号 | |
*、/、//、% | 乘、除、向下取整除、取余 | |
+、- | 加、减 | |
<、<=、>、>=、==、!=、in、not in、is、is not | 比较、成员和身份判断 | |
not | 逻辑非 | |
and | 逻辑与 | |
| 低 | or | 逻辑或 |
例如:
result = 2 + 3 * 4
print(result)乘法优先于加法,所以结果是 14。使用括号可以明确改变顺序:
result = (2 + 3) * 4
print(result)这次会先计算括号中的加法,结果是 20。
复杂条件也建议主动使用括号:
score = 75
attendance = 0.9
has_makeup_task = False
is_qualified = score >= 60 and (attendance >= 0.8 or has_makeup_task)
print("是否通过考核:", is_qualified)括号不仅能控制计算顺序,也能让条件之间的关系更容易阅读。无法快速判断优先级时,优先加括号表达意图。
综合案例:课程考核
现在用算术、比较和逻辑运算符完成一次课程考核。
考核规则如下:
- 理论成绩和实践成绩相加得到总分
- 总分不能低于 60 分
- 出勤率不能低于 80%
- 必须提交课程项目
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)运行结果:
总分: 87
成绩达标: True
出勤达标: True
已提交项目: True
最终考核通过: True可以分别修改成绩、出勤率和项目提交状态,观察哪个条件会让最终结果变成 False。
练习
- 写三个表达式,分别测试
+、//和%的结果。 - 使用
in和not in判断"Python"和"Java"是否出现在课程名称中。 - 创建两个内容相同的列表,分别使用
==和is比较,并解释结果。 - 修改课程考核案例,让“总分达标或者完成补考任务”都可以满足成绩条件。
小结
本节课最核心的是掌握 5 件事:
- 算术运算符负责计算,赋值运算符负责保存和更新结果
- 比较运算符产生布尔值,逻辑运算符负责组合多个条件
in判断是否包含,is判断是否引用同一个对象- 判断值是否相等使用
==,判断是否为None可以使用is - 复杂表达式优先使用括号明确计算顺序