你有没有想过,为什么Python能轻松算出10+20,还能判断"小明"是否在列表里?今天我们就来聊聊Python的"魔法符号"——运算符,让你5分钟掌握编程的核心操作。
嗨,我是你的Python学习搭子!上期我们搞定了数据类型,今天我们要解锁编程的第三个核心概念:运算符。
别被这个词吓到,其实它就像我们生活中的工具:计算器用来算账,尺子用来测量,运算符就是计算机用来处理数据的工具。
为什么运算符这么重要?
因为运算符是连接数据的桥梁,没有它,数据就是一堆死东西。就像你不会把苹果和香蕉直接放一起,计算机也不会自动把10和20相加。运算符告诉计算机:把这两个数字加起来,把这个字符串拼起来,或者判断这两个值是否相等。
算术运算符用于执行基本的数学运算,是编程中最常用的操作符之一。
| | | |
+ | | a + b | |
- | | a - b | |
* | | a * b | |
/ | | a / b | |
// | | a // b | |
% | | a % b | |
** | | a ** b | |
a = 10
b = 3
print(f"{a} + {b} = {a + b}") # 10 + 3 = 13
print(f"{a} / {b} = {a / b}") # 10 / 3 = 3.3333333333333335
print(f"{a} // {b} = {a // b}") # 10 // 3 = 3
print(f"{a} % {b} = {a % b}") # 10 % 3 = 1
print(f"{a} ** {b} = {a ** b}") # 10 ** 3 = 1000
- •
// 在处理负数时会向下取整(如 -7 // 3 结果为 -3)
比较运算符用于比较两个值,返回布尔值(True 或 False),常用于条件判断。
| | | |
== | | a == b | |
!= | | a != b | |
> | | a > b | |
< | | a < b | |
>= | | a >= b | |
<= | | a <= b | |
x = 5
y = 3
print(f"{x} == {y}: {x == y}") # 5 == 3: False
print(f"{x} > {y}: {x > y}") # 5 > 3: True
print(f"{x} != {y}: {x != y}") # 5 != 3: True
赋值运算符用于给变量赋值,除了基本赋值外,还支持复合赋值,让代码更简洁。
| | | |
= | a = 5 | a = 5 | |
+= | a += 3 | a = a + 3 | |
-= | a -= 3 | a = a - 3 | |
*= | a *= 3 | a = a * 3 | |
/= | a /= 3 | a = a / 3 | |
//= | a //= 3 | a = a // 3 | |
%= | a %= 3 | a = a % 3 | |
**= | a **= 3 | a = a ** 3 | |
a = 10
print(f"初始值: {a}") # 初始值: 10
a += 5# 等价于 a = a + 5
print(f"加5后: {a}") # 加5后: 15
a *= 2# 等价于 a = a * 2
print(f"乘2后: {a}") # 乘2后: 30
💡 使用技巧:复合赋值运算符可以让代码更简洁,减少重复书写变量名,提高可读性。
逻辑运算符用于组合多个条件判断,返回布尔值,是控制程序流程的重要工具。
| | |
and | | x > 5 and x < 10 |
or | | x < 5 or x > 10 |
not | | not(x > 5) |
x = 7
print(f"x在5-10之间: {x > 5and x < 10}") # x在5-10之间: True
print(f"x不在5-10之间: {x < 5or x > 10}") # x不在5-10之间: False
print(f"x大于5的反布尔值: {not(x > 5)}") # x大于5的反布尔值: False
- •
and:如果第一个条件为False,则不会计算第二个条件 - •
or:如果第一个条件为True,则不会计算第二个条件
# 短路求值示例
deffunc():
print("函数被调用了")
returnTrue
print(Falseand func()) # 只输出False,func()不会被调用
print(Trueor func()) # 只输出True,func()不会被调用
位运算符对整数的二进制位进行操作,常用于底层开发、加密算法和性能优化。
| | | |
& | | a & b | |
| | | |
^ | | a ^ b | |
~ | | ~a | |
<< | | a << 2 | |
>> | | a >> 2 | |
a = 6# 二进制: 0110
b = 3# 二进制: 0011
print(f"{a} & {b} = {a & b}") # 6 & 3 = 2 (0010)
print(f"{a} | {b} = {a | b}") # 6 | 3 = 7 (0111)
print(f"{a} ^ {b} = {a ^ b}") # 6 ^ 3 = 5 (0101)
print(f"{a} << 1 = {a << 1}") # 6 << 1 = 12 (1100)
print(f"{a} >> 1 = {a >> 1}") # 6 >> 1 = 3 (0011)
- • 高效计算(如
n << 1 等价于 n * 2,但运算速度更快)
成员运算符用于判断某个值是否属于序列(如字符串、列表、元组、集合、字典)。
| | |
in | | 'a' in 'abc' |
not in | | 'x' not in 'abc' |
# 列表成员检查
lst = [1, 2, 3, 4]
print(f"3在列表中: {3in lst}") # 3在列表中: True
print(f"5不在列表中: {5notin lst}") # 5不在列表中: True
# 字符串成员检查
s = "Python"
print(f"'yth'在字符串中: {'yth'in s}") # 'yth'在字符串中: True
# 字典成员检查(检查的是键)
d = {'name': 'Alice', 'age': 25}
print(f"'name'是字典的键: {'name'in d}") # 'name'是字典的键: True
💡 使用技巧:成员运算符比循环检查更简洁高效,是Python优雅语法的体现。
身份运算符用于比较两个对象是否是同一个对象(即内存地址是否相同),注意与 == 的区别。
a = [1, 2, 3]
b = a # b引用a指向的同一个列表对象
c = [1, 2, 3] # c是新创建的列表对象,值与a相同
print(f"a is b: {a is b}") # a is b: True(指向同一对象)
print(f"a is c: {a is c}") # a is c: False(内容相同,但不同对象)
print(f"a == c: {a == c}") # a == c: True(值相等)
print(f"a is not c: {a isnot c}") # a is not c: True
注意:对于小整数(-5 到 256),Python会缓存整数对象,所以不同的变量可能指向同一个对象。
a = 10
b = 10
print(a == b) # True
print(a is b) # True
Python中的运算符优先级决定了表达式的计算顺序。以下是常见的运算符优先级(从高到低):
result = 10 + 20 * 30
print(result) # 600
💡 注意:使用括号可以改变运算顺序,使代码更清晰。
# 错误示范
if a = 10: # 这是赋值,不是比较!
print("a等于10")
# 正确做法
if a == 10: # 这是比较
print("a等于10")
# 错误示范
result = 10 + 20 * 30
print(result) # 610,而不是900
# 正确做法
result = (10 + 20) * 30# 用括号明确优先级
print(result) # 900
# 错误示范
result = 10 << 1# 等价于10*2=20,但可读性差
# 正确做法
result = 10 * 2# 代码更清晰
# 给定以下商品信息
苹果价格 = 5.5
香蕉价格 = 3.2
苹果数量 = 2
香蕉数量 = 3
# 请计算购物车总价
总价 = 苹果价格 * 苹果数量 + 香蕉价格 * 香蕉数量
# 打印结果
print(f"购物车总价: {总价}") # 应该得到什么?
# 给定以下用户信息
用户等级 = 3
是否会员 = True
# 请判断用户是否有权限访问VIP内容
权限 = 用户等级 >= 2and 是否会员
# 打印结果
print(f"用户有权限访问VIP内容: {权限}") # 应该得到什么?
# 给定以下变量
a = 10
# 使用复合赋值运算符完成以下操作
a += 5# 等价于a = a + 5
a *= 2# 等价于a = a * 2
a %= 3# 等价于a = a % 3
# 打印结果
print(f"最终值: {a}") # 应该得到什么?
Q1:为什么10 / 3得到3.3333333333333335而不是3.333?
A:因为Python使用浮点数运算,浮点数在二进制表示中可能会有精度损失。如果需要保留两位小数,可以使用round(10/3, 2)得到3.33。
Q2:and和or的短路求值有什么用?
A:短路求值可以提高代码效率,避免不必要的计算。例如,在if a > 0 and b / a > 2中,如果a <= 0,则不会计算b / a,避免了除零错误。
Q3:什么时候使用位运算符?
A:位运算符常用于底层开发、加密算法和性能优化。例如,n << 1等价于n * 2,但运算速度更快;n & 1可以判断n是否为奇数。
Q4:is和==有什么区别?
A:==比较的是对象的值是否相等,is比较的是对象的身份标识(内存地址)。例如,[1,2,3] == [1,2,3]返回True,因为值相等;但[1,2,3] is [1,2,3]返回False,因为它们是不同的对象。
Q5:如何记忆运算符优先级?
A:可以使用口诀"括号第一,幂运算第二,正负号第三,乘除加减第四,比较第五,逻辑运算最后"。或者,使用括号明确优先级,提高代码可读性。
✅ 算术运算符:加减乘除等数学运算
✅ 比较运算符:判断两个值的大小或是否相等
✅ 赋值运算符:给变量赋值的快捷方式
✅ 逻辑运算符:组合条件的拼图
✅ 位运算符:底层操作的利器
✅ 成员运算符:判断是否在序列中
✅ 身份运算符:判断是否是同一个对象
今日成就:你已经学会了用运算符操作数据,这是编程的核心技能之一。现在你可以写出更高效、更简洁的代码了!
- 2. 巩固:试着用运算符解决你生活中的问题,比如计算水电费、判断考试成绩
- 3. 进阶:下期我们学习Python的条件判断,让代码根据不同情况做出不同的决策
我知道第一次接触这么多运算符可能会有点晕,别担心:
- 1. 你卡在哪一步了? 在评论区告诉我,我24小时内必回
- 2. 完成练习的朋友,在评论区打卡"✅已掌握运算符"
- 3. 下期想看什么? Python条件判断?循环?还是函数?
我是你的Python学习搭子,专注用最白话的方式讲技术。关注我,下次更新时系统会第一时间提醒你。我们下期见!