查看全课大纲(第 7 / 51 节)
- 1.Python 是什么?为什么值得学?
- 2.如何为 Python 编程准备一个“全家桶”环境?
- 3.Python 有哪几种执行方法?
- 4.行与缩进到底有什么用?
- 5.注释有什么用,怎么写?
- 6.变量:如何给数据起个好名字?
- 7.运算符的优先级和常见坑点是什么?
- 8.Python 中,数字和布尔值究竟有哪几种?
- 9.输入函数 `input()` 和文件读取 `open()` 怎么用?
- 10.如何将程序的结果展示给用户或保存下来?
- 11.CSV 文件怎么读怎么写才方便?
- 12.列表是什么,如何创建和访问它?
- 13.列表的修改操作,有哪些方法?
- 14.列表切片为什么能取到部分元素?排序和查找又该怎么用?
- 15.判断语句:如何让程序根据条件做不同的事?
- 16.for 循环如何遍历序列中的元素?
- 17.while 循环什么时候才会停?
- 18.while 循环的结束条件,你写对了吗?
- 19.循环中途想提前结束,怎么办?
- 20.`break` 和 `continue` 到底有什么区别?
- 21.列表推导式如何让代码更简洁高效?
- 22.字符串怎么定义、拼接和操作?
- 23.元组:为什么定义单个元素时要加逗号?
- 24.集合(set)怎么用?如何快速去重和做集合运算?
- 25.字典是什么,为什么比列表更方便?
- 26.字典的增删改查与遍历,如何避免 KeyError?
- 27.函数里的变量,为什么有的能用有的不能用?
- 28.在函数内部修改全局变量,为什么有时不生效?
- 29.函数里能修改全局变量吗?返回值怎么用?
- 30.匿名函数:如何用 lambda 快速定义简单函数?
- 31.面向对象编程是什么,为什么需要它?
- 32.类中的方法和属性到底怎么定义和使用?
- 33.如何控制对对象内部属性和方法的访问?
- 34.异常发生时,程序会怎样继续执行?
- 35.如何组织代码:包和模块
- 36.`if __name__ == '__main__'` 到底有什么用?
- 37.如何用 IDE 的 Debug 功能排查程序错误?
- 38.Matplotlib 绘图的第一步该做什么?
- 39.Figure 是什么,如何设置图形尺寸?
- 40.如何自定义 Matplotlib 的坐标轴?
- 41.如何为图表添加图例,让不同曲线一目了然?
- 42.饼图怎么画才能直观展示数据占比?
- 43.如何用 Matplotlib 绘制散点图?
- 44.柱状图怎么画?
- 45.如何使用 Matplotlib 绘制等高线图?
- 46.如何在 Matplotlib 中绘制子图?
- 47.zip 函数如何把多个列表“打包”在一起?
- 48.如何给可迭代对象加上索引?
- 49.random 模块如何生成随机数?
- 50.math 模块怎么用?
- 51.Counter 如何快速统计元素出现次数?
运算符的优先级和常见坑点是什么?
约 12 分钟
小象实战讲义 · Python 编程从入门到实践
在前面的课程中,我们已经学会了如何使用变量来存储数据。本节我们将学习如何通过运算符对这些数据进行计算和比较。运算符是连接数据、构成表达式的基本工具,理解它们的类型、用法和优先级,是编写正确逻辑代码的前提。本节是构建复杂表达式的基础,后续的控制流(如 if、while)将大量依赖本节知识。
💡 核心导读
- 算术运算符:执行基础的数学运算,包括加减乘除、取整、取余和幂运算。
- 比较运算符:比较两个值的关系,结果为布尔值(
True或False),是条件判断的核心。 - 赋值运算符:将值赋给变量,复合赋值运算符(如
+=)能简化代码。 - 逻辑运算符:连接多个布尔条件,实现“与”、“或”、“非”的逻辑判断。
- 优先级规则:不同运算符混合时,计算顺序由优先级决定,括号可以明确指定计算顺序。
算术运算符:基础数学计算
算术运算符用于执行基本的数学运算。
# 基础加减乘
a = 2 + 3
b = 5 - 2
c = 3 * 4
print(a)
print(b)
print(c)
# 除法:单斜杠 / 得到浮点数结果(真除法)
result_float = 4 / 3
print(result_float)
# 取整除法:双斜杠 // 只取商的整数部分,不四舍五入
result_floor = 4 // 3
print(result_floor)
result_floor2 = 5 // 3
print(result_floor2)
# 取模(求余数):百分号 %
remainder = 5 % 3
print(remainder)
# 幂运算:双星号 **
power = 4 ** 3
print(power)5
3
12
1.3333333333333333
1
1
2
64是什么:/进行真除法,结果总是浮点数;//进行取整除法,只取商的整数部分,不做四舍五入;%求余数;**计算幂次。
常见坑:// 不是四舍五入,而是丢弃小数部分。例如 5 // 3 得到 1(不是 2),因为 5 / 3 的整数部分是 1。需要整数商时用 //,需要小数结果时用 /。
比较与逻辑运算符:做出判断
比较运算符用于比较两个值,返回布尔值(True或False)。逻辑运算符用于连接多个布尔条件。
# 比较运算符
print(2 > 3) # 大于
print(3 > 2) # 大于
print(4 < 3) # 小于
print(2 >= 2) # 大于等于
print(3 <= 2) # 小于等于
print(3 == 3) # 等于
print(3 != 2) # 不等于
# 逻辑运算符:and, or, not
x = (2 > 1) # True
y = (3 < 2) # False
print(x and y) # 与:两者都为True才为True
print(x or y) # 或:至少一个为True就为True
print(not x) # 非:取反
print(not y)
# 逻辑运算符连接复杂条件
age = 20
score = 85
print((age >= 18) and (score >= 60)) # 成年且及格
print((age < 18) or (score < 60)) # 未成年或不及格False
True
False
True
False
True
True
False
True
False
True
True
False是什么:比较运算符包括 >、<、>=、<=、==(等于)、!=(不等于)。它们构成了条件判断的基础。
怎么用:and 表示“并且”,or 表示“或者”,not 表示“非”。它们常用于 if 语句的条件组合。
常见坑:and 和 or 的优先级不同,and 高于 or。不要凭感觉从左到右计算,复杂表达式应加括号。
赋值与复合赋值运算符
赋值运算符 = 将右侧的值赋给左侧的变量。复合赋值运算符将运算与赋值合并。
a = 5
print(a)
# 复合赋值运算符
a += 2 # 等价于 a = a + 2
print(a)
a -= 1 # 等价于 a = a - 1
print(a)
a *= 3 # 等价于 a = a * 3
print(a)
a //= 4 # 等价于 a = a // 4
print(a)5
7
6
18
4是什么:+=、-=、*=、/=、//=、%=、**= 等都是复合赋值运算符。
怎么用:变量 运算符= 表达式 等价于 变量 = 变量 运算符 (表达式)。它使代码更简洁。
运算符优先级:谁先计算?
当多种运算符出现在同一个表达式中时,Python 按照优先级顺序计算。优先级高的先算。
优先级规则(从高到低):
**(幂)*,/,//,%(乘、除、取整、取余)+,-(加、减)>,<,>=,<=,==,!=(比较运算符)not(逻辑非)and(逻辑与)or(逻辑或)
同一级别内的优先级:逻辑运算符内部,and 的优先级高于 or,下面用代码验证。
# 优先级:算术运算符 > 比较运算符 > 逻辑运算符
# 2+3 和 1+2 先计算,然后比较 5 > 3
result = 2 + 3 > 1 + 2
print(result)
# 使用括号可以改变优先级,让意图更清晰
result_clear = (2 + 3) > (1 + 2)
print(result_clear)
# 演示 and 优先级高于 or
# 表达式:True or False and False
# 如果 or 先算:(True or False) and False -> True and False -> False
# 实际 and 先算:True or (False and False) -> True or False -> True
result = True or False and False
print(result)
# 使用括号明确意图总是好习惯
result_with_parentheses = (True or False) and False
print("加括号明确or先算:", result_with_parentheses)True
True
True
加括号明确or先算: False重要建议:对于复杂的逻辑表达式,不要依赖记忆优先级,而是主动使用小括号 () 来明确指定计算顺序。这能避免错误,并大大提高代码的可读性。
📝 动手练一练
- 计算与判断:假设商品单价为
25.5元,购买数量为3。计算总价(单价*数量)。如果总价大于70元,则享受9折优惠,重新计算折后总价(使用复合赋值运算符)。最后打印折后总价,并判断折后总价是否低于80元。
👉 点击查看参考答案
思路:先计算原总价,用 if 判断是否大于70,如果大于则用 *= 乘以0.9计算折后价。最后用比较运算符判断并打印结果。
price = 25.5
quantity = 3
total = price * quantity
if total > 70:
total *= 0.9 # 打九折
print("折后总价为:{:.2f} 元".format(total)) # 格式化保留两位小数
is_less_than_80 = total < 80
print("折后总价低于80元吗?{}".format(is_less_than_80))折后总价为:68.85 元
折后总价低于80元吗?True常见错误
| 错误写法 | 现象或报错 | 原因 | 正确写法 |
|---|---|---|---|
5 // 3 期望得到 2 | 实际得到 1 | 取整除法 // 只取整数部分,不四舍五入;5 / 3 的整数部分是 1。 | 需要整数商时用 //,需要小数结果时用 /。 |
1/2 期望得到 0 | 得到 0.5 | Python 3 中 / 是真除法,总是返回浮点数结果。 | 取整请使用 1 // 2。 |
小结
- 算术运算符
+,-,*,/,//,%,**用于数值计算,注意/(真除)与//(取整除)的区别。 - 比较运算符
>,<,>=,<=,==,!=用于比较,结果是布尔值True或False。 - 逻辑运算符
and,or,not用于连接布尔条件,构建复杂的判断逻辑。 - 复合赋值运算符(如
+=)是“运算+赋值”的简写形式,能使代码更简洁。 - 运算符有明确的优先级:算术 > 比较 > 逻辑(
not>and>or)。编写复杂表达式时,使用括号()来明确计算顺序是最佳实践,能避免错误并提升可读性。
📋 行动清单
- 在 Python 交互环境中,亲自输入本节所有示例代码,观察输出结果,确保理解。
- 尝试写出一个表达式,包含至少两种算术运算符、一个比较运算符和一个逻辑运算符,并用括号改变其运算顺序,验证结果。
- 回顾“常见错误”表格,确保自己不会犯这些典型错误。
—— 小象教研组