运算符大全|第二部分:Python核心数据类型与运算符 (Core Data Types & Operators)
欢迎回来,未来的编程大师!在上一章,我们认识了Python世界的基础元素——数据类型。但光有这些“原材料”还不够,我们还需要工具来对它们进行加工、组合和比较。这些工具,就是运算符。
如果说数据类型是乐高积木,那么运算符就是你那双充满创造力的手,让你能将积木拼接、拆分、比较大小,最终搭建出宏伟的城堡。本章将带你全面掌握Python中的各种运算符,从简单的加减乘除到复杂的逻辑判断,让你真正拥有“动手”创造的能力。准备好,让数据在你的指尖下“动”起来吧!
5.1 算术运算符:你的随身计算器
这是最直观、最常用的一类运算符,它们让你能像使用计算器一样对数字进行各种数学运算。
运算符 | 名称 | 描述 | 示例 | 结果 |
---|---|---|---|---|
+ |
加 | 两数相加 | 10 + 5 |
15 |
- |
减 | 两数相减 | 10 - 5 |
5 |
* |
乘 | 两数相乘 | 10 * 5 |
50 |
/ |
除 | 两数相除,结果总是浮点数 | 10 / 5 |
2.0 |
// |
整除 | 两数相除,结果向下取整 | 10 // 3 |
3 |
% |
取模 | 返回除法的余数 | 10 % 3 |
1 |
** |
幂 | x的y次方 | 2 ** 4 |
16 |
a = 10
b = 3
print(f"a + b = {a + b}") # 输出: a + b = 13
print(f"a / b = {a / b}") # 输出: a / b = 3.333... (真除法)
print(f"a // b = {a // b}") # 输出: a // b = 3 (地板除,向下取整)
print(f"a % b = {a % b}") # 输出: a % b = 1 (求余数)
print(f"2 ** 10 = {2 ** 10}") # 输出: 2 ** 10 = 1024
一个有趣的应用:+
和 *
不仅能用于数字,还能“客串”到字符串和列表上!
# 字符串拼接
greeting = "Hello" + " " + "World"
print(greeting) # 输出: Hello World
# 字符串重复
line = "-" * 20
print(line) # 输出: --------------------
# 列表合并
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined_list = list1 + list2
print(combined_list) # 输出: [1, 2, 3, 4, 5, 6]
# 列表重复
zeros = [0] * 5
print(zeros) # 输出: [0, 0, 0, 0, 0]
5.2 赋值运算符:给变量“贴标签”的快捷方式
赋值运算符用于将右侧的值赋给左侧的变量。最基本的就是 =
。但为了代码更简洁,Python提供了一系列“复合赋值运算符”。
运算符 | 等价于 | 示例 |
---|---|---|
= |
x = 5 |
x = 5 |
+= |
x = x + 5 |
x += 5 |
-= |
x = x - 5 |
x -= 5 |
*= |
x = x * 5 |
x *= 5 |
/= |
x = x / 5 |
x /= 5 |
//= |
x = x // 5 |
x //= 5 |
%= |
x = x % 5 |
x %= 5 |
**= |
x = x ** 5 |
x **= 5 |
# 初始值
score = 100
# 加分
score += 10 # 等价于 score = score + 10
print(f"加分后: {score}") # 输出: 加分后: 110
# 打折
price = 80
price *= 0.9 # 等价于 price = price * 0.9
print(f"九折后: {price}") # 输出: 九折后: 72.0
使用复合赋值运算符不仅能少打几个字,还能让你的代码意图更清晰,看起来更专业!
5.3 比较运算符:代码世界的“法官”
比较运算符用于比较两个值,然后返回一个布尔值:True
或 False
。它们是构建所有条件判断的基石。
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
== |
等于 | 5 == 5 |
True |
!= |
不等于 | 5 != 5 |
False |
> |
大于 | 5 > 3 |
True |
< |
小于 | 5 < 3 |
False |
>= |
大于等于 | 5 >= 5 |
True |
<= |
小于等于 | 5 <= 3 |
False |
⚠️ 新手巨坑警告: 一定要区分 =
(赋值) 和 ==
(比较)!
age = 18
的意思是:“把18这个值赋予给变量age”。age == 18
的意思是:“检查age的值是不是等于18?”
password = "123"
user_input = "123"
# 检查密码是否正确
is_correct = (password == user_input)
print(f"密码正确吗? {is_correct}") # 输出: 密码正确吗? True
age = 20
# 检查是否成年
is_adult = (age >= 18)
print(f"是否成年? {is_adult}") # 输出: 是否成年? True
5.4 逻辑运算符:构建复杂判断的“连接词”
当你需要组合多个条件时,逻辑运算符就登场了。它们就像我们说话时的“并且”、“或者”、“不是”。
运算符 | 描述 | 示例 | 结果 |
---|---|---|---|
and |
与 | 两个条件都为True 时,结果才为True |
True and False |
or |
或 | 只要有一个条件为True ,结果就为True |
True or False |
not |
非 | 对布尔值取反 | not True |
生活中的例子:
and
:要出门看电影,必须 “我有空and
电影院在营业”。or
:午餐吃什么?可以 “吃米饭or
吃面条”。not
:今天天气如何?“not
(正在下雨)”。
age = 22
has_ticket = True
# 检查是否能进入酒吧 (年龄需大于等于21 并且 有票)
can_enter = (age >= 21) and has_ticket
print(f"可以进入吗? {can_enter}") # 输出: 可以进入吗? True
# 检查是否需要带伞 (外面在下雨 或者 天气预报说会下雨)
is_raining = False
forecast_rain = True
need_umbrella = is_raining or forecast_rain
print(f"需要带伞吗? {need_umbrella}") # 输出: 需要带伞吗? True
# 检查门是否不是锁着的
is_locked = False
is_open = not is_locked
print(f"门是开着的吗? {is_open}") # 输出: 门是开着的吗? True
5.5 身份运算符:检查是否为“同一个”
身份运算符用于比较两个对象是否是同一个对象,即它们在内存中的地址是否相同。这比 ==
更严格。
运算符 | 描述 | 示例 |
---|---|---|
is |
判断两个标识符是不是引用自同一个对象 | a is b |
is not |
判断两个标识符是不是引用自不同的对象 | a is not b |
想象一下,你有两个一模一样的杯子(内容、颜色、大小都一样),==
会告诉你它们是“相等的”。但 is
会告诉你,它们是两个独立的杯子。
list_a = [1, 2, 3]
list_b = [1, 2, 3]
list_c = list_a
print(f"list_a == list_b: {list_a == list_b}") # True, 因为内容相等
print(f"list_a is list_b: {list_a is list_b}") # False, 因为它们是内存中两个独立的对象
print(f"list_a == list_c: {list_a == list_c}") # True, 内容相等
print(f"list_a is list_c: {list_a is list_c}") # True, 因为list_c只是list_a的另一个名字,指向同一个对象
通常,你会在检查一个变量是否为 None
时使用 is
,这是一种Pythonic(地道的Python)写法:if my_var is None:
。
5.6 成员运算符:检查“在不在”里面
成员运算符用于测试序列(如字符串、列表、元组、集合、字典)中是否包含某个成员。
运算符 | 描述 | 示例 |
---|---|---|
in |
如果在指定的序列中找到值,返回True |
5 in [1, 2, 3, 4, 5] |
not in |
如果在指定的序列中找不到值,返回True |
10 not in [1, 2, 3, 4, 5] |
my_pets = ["cat", "dog", "hamster"]
# 检查 "dog" 是否在我的宠物列表中
print("dog" in my_pets) # 输出: True
# 检查 "fish" 是否在我的宠物列表中
print("fish" in my_pets) # 输出: False
# 检查一个字母是否在字符串中
print("P" in "Python") # 输出: True
# 检查一个键是否在字典中 (注意:只检查键)
user_info = {"name": "Bob", "age": 30}
print("age" in user_info) # 输出: True
print("Bob" in user_info) # 输出: False (因为 "Bob" 是值,不是键)
5.7 位运算符:深入计算机的底层世界 (选读)
位运算符直接操作整数的二进制位。在常规应用开发中不常用,但在底层编程、图像处理、加密等领域非常重要。你可以暂时跳过,或者作为兴趣了解。
运算符 | 名称 | 描述 |
---|---|---|
& |
按位与 | 对应位都为1时,结果才为1 |
| |
按位或 | 对应位有一个为1时,结果就为1 |
^ |
按位异或 | 对应位不同时,结果为1 |
~ |
按位取反 | 0变1,1变0 |
<< |
左移 | 所有位向左移动指定的位数 |
>> |
右移 | 所有位向右移动指定的位数 |
# 5 的二进制是 0101
# 3 的二进制是 0011
a = 5
b = 3
print(a & b) # 0101 & 0011 = 0001 (结果是 1)
print(a | b) # 0101 | 0011 = 0111 (结果是 7)
5.8 运算符优先级:谁先谁后?
当一个表达式中包含多个运算符时,谁先计算?这就由运算符的优先级决定,和我们小学学的“先乘除后加减”是一个道理。
以下是一个简化的优先级顺序(从高到低):
**
(幂)*
,/
,//
,%
(乘、除、整除、取模)+
,-
(加、减)>
,<
,==
,!=
,>=
,<=
(比较运算符)is
,is not
(身份运算符)in
,not in
(成员运算符)not
(逻辑非)and
(逻辑与)or
(逻辑或)
# 哪个会先计算?
result = 5 + 2 * 3 - 1
# 乘法优先级高,先算 2 * 3 = 6
# 然后从左到右算 5 + 6 - 1 = 10
print(result) # 输出: 10
终极秘诀:如果你记不住优先级,或者想让代码更清晰,请毫不犹豫地使用圆括号 ()
!括号拥有最高的优先级,能强制改变运算顺序。
# 使用括号明确意图
result_clear = (5 + 2) * (3 - 1)
# 先算 (5 + 2) = 7
# 再算 (3 - 1) = 2
# 最后算 7 * 2 = 14
print(result_clear) # 输出: 14
太棒了!你现在已经掌握了Python的“十八般兵器”。你不仅认识了各种数据,还能熟练地使用运算符对它们进行各种操作。这是从静态的数据认知到动态的程序逻辑的关键一步。
我们已经有了“食材”(数据类型)和“厨具”(运算符),接下来需要什么?没错,是“菜谱”!下一章,我们将进入激动人心的流程控制,学习 if
判断和 for/while
循环。你将学会如何让程序根据不同的情况做出不同的反应,以及如何重复执行任务,真正让你的代码“活”起来!准备好,迎接编程的核心魅力吧!