Python 学习笔记(第二期)——基础语法(下篇):运算符全解与实战演练
Python 学习笔记(第二期)——基础语法(下篇):运算符全解与实战演练
知识衔接:Python 学习笔记(第一期)——基础语法(上篇):环境搭建与数据基石
更多Python知识:Python基础入门
我的主页:AOwhisky,这里有更多运维系统性知识整理和其他有趣内容,欢迎与我一起探讨学习~
📖 引言:数据的“加工厂”
在上一期中,我们完成了Python环境的搭建,认识了变量和各种各样的数据类型——数字、字符串、列表、元组、集合、字典。如果把数据比作食材,那么现在我们的“厨房”里已经堆满了新鲜的蔬菜、肉类和调料。
但食材堆在那里是不会变成美味佳肴的。我们需要切、剁、炒、煮、调味——这些对食材的加工操作,对应到编程中就是运算符。运算符是连接数据与逻辑的桥梁,它们让静态的数据“活”起来,进行加减乘除、比较大小、判断真假、按位运算……可以说,程序之所以能“计算”,核心就在于运算符。
本下篇将带您系统掌握Python中所有常用运算符,并通过四个完整的综合实战项目,将这些知识融会贯通。学完本篇,您将具备独立编写小型实用程序的能力。
📑 本期目录
- 算术运算符(
+ - * / // % **) - 赋值运算符(含海象运算符
:=) - 比较运算符(含链式比较)
- 逻辑运算符(含短路求值)
- 成员运算符(
in/not in) - 位运算符(
& | ^ ~ << >>,含补码图解) - 运算符优先级(完整速查表)
- 综合实战演练(四个完整案例)
- 总结与知识点一览表
正文
一、算术运算符
算术运算符是最直观的运算符,用于执行数学运算。假设 a = 10,b = 3,下表展示了所有算术运算符的行为:
| 运算符 | 名称 | 示例 | 结果 | 说明 |
|---|---|---|---|---|
+ |
加法 | a + b |
13 |
两数相加 |
- |
减法 | a - b |
7 |
两数相减 |
* |
乘法 | a * b |
30 |
两数相乘 |
/ |
真除法 | a / b |
3.333... |
结果总是浮点数 |
// |
整除(地板除) | a // b |
3 |
向下取整,返回整数部分 |
% |
取余(模运算) | a % b |
1 |
返回除法的余数 |
** |
幂运算 | a ** b |
1000 |
计算 a 的 b 次方 |
💡 白话理解:
/和//的区别是初学者最容易混淆的点。您可以这样记——/是“精确除法”,哪怕结果是整数,它也非要给你带个.0;//是“整除”,只管商的部分,余数直接扔掉(向下取整)。例如7 // 2得3,-7 // 2得-4(因为 -3.5 向下取整是 -4)。
混合运算的类型提升规则:
当不同类型的数字混合运算时,Python会自动进行临时类型转换,遵循“向更高精度”提升的原则:
- 整型 + 浮点型 → 浮点型
- 整型 + 复数 → 复数
- 浮点型 + 复数 → 复数
print(10 / 2.0) # 5.0(整型10被提升为浮点型)
print(10 - (3 + 5j)) # (7 - 5j)(整型10被提升为复数)
二、赋值运算符
赋值运算符的作用是将一个值赋给变量。等号 = 是最基本的赋值运算符。
2.1 基本赋值与链式赋值
# 单个赋值
num = 10
# 链式赋值(多个变量指向同一个值)
x = y = z = 1 # x、y、z 均为 1
# 平行赋值(元组解包)
a, b = 1, 2 # a = 1, b = 2
2.2 复合赋值运算符
复合赋值运算符将算术运算与赋值合二为一,让代码更简洁:
| 运算符 | 示例 | 等价于 |
|---|---|---|
+= |
num += 2 |
num = num + 2 |
-= |
num -= 2 |
num = num - 2 |
*= |
num *= 2 |
num = num * 2 |
/= |
num /= 2 |
num = num / 2 |
//= |
num //= 2 |
num = num // 2 |
%= |
num %= 2 |
num = num % 2 |
**= |
num **= 2 |
num = num ** 2 |
count = 5
count += 3 # 等价于 count = count + 3
print(count) # 8
2.3 海象运算符 :=(Python 3.8+)
海象运算符是Python 3.8引入的新特性,它允许在表达式内部为变量赋值,因形似海象的眼睛和长牙而得名(:=)。
典型场景:在循环或条件判断中,同时完成赋值和判断,避免重复计算。
# 传统写法(需要先赋值,再判断)
data = input("请输入内容:")
while len(data) == 0:
print("内容不能为空!")
data = input("请输入内容:")
# 海象运算符写法(在while条件中直接赋值)
while (data := input("请输入内容:")) == "":
print("内容不能为空!")
注意:海象运算符的优先级较低,当与比较运算符混用时,记得加括号
()明确优先级。
三、比较运算符
比较运算符用于比较两个值的大小或相等关系,返回布尔值 True 或 False。假设 x = 5,y = 8:
| 运算符 | 名称 | 示例 | 结果 |
|---|---|---|---|
== |
等于 | x == y |
False |
!= |
不等于 | x != y |
True |
> |
大于 | x > y |
False |
< |
小于 | x < y |
True |
>= |
大于等于 | x >= y |
False |
<= |
小于等于 | x <= y |
True |
⚠️ 常见误区:
=是赋值,==才是比较相等。初学者常把if score = 100写成这样,会报语法错误。正确的写法是if score == 100。
3.1 链式比较(Python独有语法)
Python支持将多个比较运算符串联在一起,这在其他语言中是不常见的,但非常直观:
score = 85
# 传统写法(使用 and 连接)
if score >= 60 and score < 80:
print("合格")
# 链式比较(更符合数学直觉)
if 60 <= score < 80:
print("合格")
四、逻辑运算符
逻辑运算符用于组合多个布尔表达式,返回布尔值。Python使用英文单词作为逻辑运算符,比符号(&&、||、!)更易读。
| 运算符 | 名称 | 示例 | 说明 |
|---|---|---|---|
and |
逻辑与 | a and b |
两边都为 True 时返回 True |
or |
逻辑或 | a or b |
任意一边为 True 时返回 True |
not |
逻辑非 | not a |
取反,True 变 False,False 变 True |
4.1 短路求值(重要特性)
逻辑运算符的求值遵循“短路”原则:当结果已经确定时,就不再计算后续表达式。
and:如果左边为False,整个表达式必定为False,不再计算右边。or:如果左边为True,整个表达式必定为True,不再计算右边。
def print_and_return(value):
print(f"被调用了,值为 {value}")
return value
# and 短路:左边为 False,右边不执行
result = print_and_return(False) and print_and_return(True)
# 输出:被调用了,值为 False
# 注意:print_and_return(True) 没有被调用
# or 短路:左边为 True,右边不执行
result = print_and_return(True) or print_and_return(False)
# 输出:被调用了,值为 True
# 注意:print_and_return(False) 没有被调用
💡 思维误区:逻辑运算符返回的不一定是
True或False。and和or返回的是决定结果的最后一个操作数:
x and y:如果 x 为假,返回 x;否则返回 y。x or y:如果 x 为真,返回 x;否则返回 y。print(0 and 100) # 0(0 为假,直接返回 0) print(5 and 100) # 100(5 为真,返回第二个操作数) print(0 or 100) # 100(0 为假,返回第二个操作数) print(5 or 100) # 5(5 为真,直接返回 5)
五、成员运算符
成员运算符用于判断一个元素是否属于某个序列(字符串、列表、元组、集合、字典的键等)。
| 运算符 | 说明 | 示例 |
|---|---|---|
in |
如果指定元素在序列中,返回 True |
't' in 'Python' → True |
not in |
如果指定元素不在序列中,返回 True |
't' not in 'Python' → False |
# 字符串中的成员判断
print('o' in 'Python') # True
# 列表中的成员判断
print(3 in [1, 2, 3]) # True
# 字典中的成员判断(判断的是键,不是值)
person = {"name": "Tom", "age": 18}
print("name" in person) # True(判断键是否存在)
print("Tom" in person) # False("Tom" 是值,不是键)
六、位运算符
位运算符将整数转换为二进制形式,然后按位进行运算。虽然日常开发中位运算用得不多,但在底层开发、网络协议解析和性能优化场景中非常重要。
假设 a = 9(二进制 00001001),b = 3(二进制 00000011):
| 运算符 | 名称 | 示例 | 结果 | 说明 |
|---|---|---|---|---|
& |
按位与 | a & b |
1 |
两位都为1时结果为1 |
| ` | ` | 按位或 | `a | b` |
^ |
按位异或 | a ^ b |
10 |
两位不同(一个0一个1)时结果为1 |
~ |
按位取反 | ~a |
-10 |
0变1,1变0(含符号位) |
<< |
左移 | a << 1 |
18 |
所有位左移,右侧补0 |
>> |
右移 | a >> 1 |
4 |
所有位右移,左侧补0 |
6.1 位运算的二进制示意图
按位与(&):只有两位都是1,结果位才是1。
00001001 (9)
& 00000011 (3)
-----------
00000001 (1)
按位或(|):只要有一位是1,结果位就是1。
00001001 (9)
| 00000011 (3)
-----------
00001011 (11)
按位异或(^):两位不同时结果位为1,相同时为0。
00001001 (9)
^ 00000011 (3)
-----------
00001010 (10)
按位左移(<<):左移 n 位等价于乘以 2^n。
00001001 (9)
<< 1
-----------
00010010 (18) ← 9 * 2 = 18
按位右移(>>):右移 n 位等价于整除 2^n。
00001001 (9)
>> 1
-----------
00000100 (4) ← 9 // 2 = 4
6.2 按位取反(~)的详细计算
按位取反是最容易让初学者困惑的运算符。以 ~9 为例,计算过程如下:
- 确定补码:9 是正数,正数的原码 = 反码 = 补码,所以 9 的补码为
00001001。 - 对补码取反:得到新的补码
11110110。 - 将补码转换为原码(即我们能看到的值):符号位(最高位)不变,其余位取反,然后 +1。
11110110的符号位为1(表示负数)- 其余位取反:
00001001,再 +1:00001010=10 - 最终结果为
-10
print(~9) # -10
记忆口诀:
~x等价于-x - 1。例如~9 = -10,~(-9) = 8。
七、运算符优先级
当表达式中包含多个运算符时,优先级决定了计算的先后顺序。下表按优先级从高到低排列:
| 优先级 | 运算符 | 说明 |
|---|---|---|
| 最高 | (expressions...) |
圆括号(强行改变优先级) |
** |
幂运算 | |
+x, -x, ~x |
正号、负号、按位取反 | |
*, /, //, % |
乘法、除法、整除、取余 | |
+, - |
加法、减法 | |
<<, >> |
左移、右移 | |
& |
按位与 | |
^ |
按位异或 | |
| ` | ` | |
in, not in, is, is not, <, <=, >, >=, !=, == |
比较运算符、成员运算符、身份运算符 | |
not |
逻辑非 | |
and |
逻辑与 | |
or |
逻辑或 | |
| 最低 | = 及各种复合赋值 |
赋值运算符 |
💡 黄金法则:当不确定优先级时,不要犹豫,直接加括号
()。加括号不仅让优先级明确,还能让代码的可读性大幅提升。例如(a + b) * c比a + b * c更清晰地传达了意图。
a, b, c = 2, 3, 4
# 不加括号,先算幂再算乘
result1 = c ** b * a # 4**3 * 2 = 64 * 2 = 128
# 加括号,先算乘法再算幂
result2 = c ** (b * a) # 4**(3*2) = 4**6 = 4096
print(result1) # 128
print(result2) # 4096
八、综合实战演练
理论学得再多,不如亲手敲一遍代码。以下四个案例将综合运用本期所学的各类运算符,覆盖实际开发中的常见场景。
实战一:打印购物小票
需求描述:模拟超市收银系统,根据商品名称、单价和购买数量,计算总金额并打印格式化的购物小票。
涉及知识点:算术运算符、赋值运算符、字符串格式化(f-string)、转义字符(\t、\n)
# 购物小票打印程序
# 商品信息(模拟用户输入或预设)
product_name = "农夫山泉矿泉水"
price = 2.5 # 单价(元)
quantity = 3 # 购买数量
# 计算总金额
total = price * quantity
# 打印购物小票
print("=" * 40)
print(" 欢 迎 光 临")
print("=" * 40)
print(f"商品:{product_name}")
print(f"单价:¥{price:.2f}")
print(f"数量:{quantity}")
print("-" * 40)
print(f"合计:¥{total:.2f}")
print("=" * 40)
print(f"实收:¥{total:.2f}")
print(f"找零:¥0.00")
print("-" * 40)
print(" 感谢您的惠顾,欢迎下次光临!")
print("=" * 40)
预期输出:
========================================
欢 迎 光 临
========================================
商品:农夫山泉矿泉水
单价:¥2.50
数量:3
----------------------------------------
合计:¥7.50
========================================
实收:¥7.50
找零:¥0.00
----------------------------------------
感谢您的惠顾,欢迎下次光临!
========================================
逐行解读:
"=" * 40:利用字符串与整数的乘法,生成一条40个等号组成的分隔线。f"单价:¥{price:.2f}"::.2f表示保留两位小数,确保金额显示规范。total = price * quantity:算术乘法计算总价。
实战二:蚂蚁森林植树证书
需求描述:蚂蚁森林用户通过低碳行为积攒能量,能量达标后可申请种树,系统会生成一张植树证书。本案例模拟生成植树证书信息。
涉及知识点:字典数据类型、字符串格式化(f-string)、字符串拼接(+ 运算符)
# 蚂蚁森林植树证书生成程序
# 用户证书信息(模拟数据)
certificate = {
"user_name": "张三",
"tree_type": "梭梭树",
"plant_date": "2026-07-08",
"tree_number": "ZSLF202607080001",
"location": "甘肃省武威地区民勤县",
"organization": "中国扶贫基金会"
}
# 生成证书信息
print()
print("*" * 50)
print(" " * 16 + "🌳 植树证书 🌳")
print("*" * 50)
print(f"\n 尊敬的 {certificate['user_name']}:")
print(f"\n 感谢您参与蚂蚁森林公益项目!")
print(f"\n 您于 {certificate['plant_date']} 申请种植的")
print(f" {certificate['tree_type']},已被 {certificate['organization']}")
print(f" 认领,将种植到 {certificate['location']}。")
print(f"\n 🌱 树苗编号:{certificate['tree_number']}")
print("\n" + "*" * 50)
print(" 一棵树,一片林,让地球更美好!")
print("*" * 50)
预期输出:
**************************************************
🌳 植树证书 🌳
**************************************************
尊敬的 张三:
感谢您参与蚂蚁森林公益项目!
您于 2026-07-08 申请种植的
梭梭树,已被 中国扶贫基金会
认领,将种植到 甘肃省武威地区民勤县。
🌱 树苗编号:ZSLF202607080001
**************************************************
一棵树,一片林,让地球更美好!
**************************************************
逐行解读:
" " * 16:用空格进行缩进,实现标题居中效果。certificate['user_name']:通过键访问字典中的值。"\n" * 2:用换行符增加段落间距。
实战三:摄氏温度 ↔ 开氏温度转换
需求描述:绝对温标(开氏温标)是热力学中的重要参数,其零度对应摄氏温度的 -273.15℃。本程序接收用户输入的摄氏温度,计算并输出对应的开氏温度。
涉及知识点:算术运算符、input() 函数、float() 类型转换、f-string 格式化
# 摄氏温度转开氏温度
# 获取用户输入的摄氏温度
celsius = input("请输入摄氏温度(℃):")
celsius = float(celsius) # 将字符串转换为浮点数
# 计算开氏温度(K = ℃ + 273.15)
kelvin = celsius + 273.15
# 输出结果
print(f"{celsius}℃ 对应的开氏温度为:{kelvin:.2f}K")
预期输出:
请输入摄氏温度(℃):25
25.0℃ 对应的开氏温度为:298.15K
扩展:增加华氏温度转换
# 摄氏温度转华氏温度(华氏度 = 摄氏度 × 9/5 + 32)
fahrenheit = celsius * 9 / 5 + 32
print(f"{celsius}℃ 对应的华氏温度为:{fahrenheit:.2f}℉")
预期输出:
25.0℃ 对应的华氏温度为:77.00℉
实战四:BMI 指数计算器
需求描述:BMI(身体质量指数)是国际上常用的衡量人体胖瘦程度和是否健康的标准。计算公式为:BMI = 体重(kg) / 身高(m)²。本程序接收用户输入的身高和体重,计算 BMI 值并给出健康评估。
涉及知识点:算术运算符(*、/、**)、比较运算符、逻辑运算符、if 条件判断(综合运用)
# BMI 指数计算器
# 获取用户输入
height = input("请输入您的身高(单位:米):")
weight = input("请输入您的体重(单位:公斤):")
# 类型转换(字符串 → 浮点数)
height = float(height)
weight = float(weight)
# 计算 BMI(体重 / 身高²)
bmi = weight / (height * height)
# 简化写法:bmi = weight / height ** 2
print(f"\n您的 BMI 指数为:{bmi:.2f}")
# 根据 BMI 值给出评估(使用比较运算符和链式比较)
if bmi < 18.5:
assessment = "体重过轻 🟡"
elif 18.5 <= bmi < 24.9:
assessment = "正常范围 ✅"
elif 24.9 <= bmi < 29.9:
assessment = "体重过重 🟠"
else:
assessment = "肥胖 🔴(建议适当运动、合理饮食)"
print(f"评估结果:{assessment}")
预期输出(以身高1.75米,体重70公斤为例):
请输入您的身高(单位:米):1.75
请输入您的体重(单位:公斤):70
您的 BMI 指数为:22.86
评估结果:正常范围 ✅
逐行解读:
height ** 2:幂运算符计算身高的平方,等价于height * height。18.5 <= bmi < 24.9:链式比较,同时判断 BMI 是否大于等于18.5且小于24.9。- 代码中包含了输入校验的扩展思路——可以结合
isdigit()方法判断用户输入是否合法。
实战五:简单计算器(附加案例)
需求描述:实现一个支持加减乘除四则运算的简单计算器,用户输入两个数字和运算符,程序输出计算结果。
涉及知识点:条件判断、算术运算符、input() 输入处理
# 简单计算器
# 获取用户输入
num1 = float(input("请输入第一个数字:"))
operator = input("请输入运算符(+ - * /):")
num2 = float(input("请输入第二个数字:"))
# 根据运算符执行计算
if operator == "+":
result = num1 + num2
elif operator == "-":
result = num1 - num2
elif operator == "*":
result = num1 * num2
elif operator == "/":
if num2 == 0:
result = "错误:除数不能为0!"
else:
result = num1 / num2
else:
result = "错误:不支持的运算符!"
print(f"{num1} {operator} {num2} = {result}")
预期输出:
请输入第一个数字:10
请输入运算符(+ - * /):/
请输入第二个数字:3
10.0 / 3.0 = 3.3333333333333335
九、扩展知识:字符编码与字节关系
在文件操作和网络传输中,字符编码是一个必须了解的知识点。不同的编码方式下,同一个字符占用的字节数可能不同:
| 编码方式 | 适用语言 | 一个英文字符 | 一个中文字符 |
|---|---|---|---|
| ASCII | 英文 | 1 字节 | 不支持 |
| GBK | 中文(国标) | 1 字节 | 2 字节 |
| UTF-8 | 国际通用 | 1 字节 | 3 字节 |
| Unicode | 国际通用 | 2 字节 | 2 字节 |
实际开发建议:统一使用 UTF-8 编码,它兼容性最好,是跨平台、跨语言的首选。在 Python 中打开文件时,指定
encoding='utf-8'可以避免乱码问题。
📝 总结与知识点一览表
核心知识点汇总
| 类别 | 核心内容 | 易错点提醒 |
|---|---|---|
| 算术运算符 | + - * / // % ** |
区分 /(真除法)和 //(整除) |
| 赋值运算符 | =、复合赋值、海象运算符 := |
= 是赋值,== 是比较 |
| 比较运算符 | == != > < >= <=,链式比较 |
不要写成 => 或 =<(语法错误) |
| 逻辑运算符 | and or not,短路求值 |
短路求值可能跳过右边表达式的执行 |
| 成员运算符 | in、not in |
字典中判断的是键,不是值 |
| 位运算符 | `& | ^ ~ << >>` |
| 优先级 | 圆括号最高,赋值最低 | 不确定就加括号! |
常用运算符速查表
| 运算符 | 功能 | 示例 | 结果 |
|---|---|---|---|
** |
幂运算 | 2 ** 10 |
1024 |
// |
整除 | 10 // 3 |
3 |
% |
取余 | 10 % 3 |
1 |
:= |
海象运算符(表达式内赋值) | while (n := len(s)) > 0 |
赋值并判断 |
== |
判断相等 | 5 == 5 |
True |
!= |
判断不等 | 5 != 3 |
True |
and |
逻辑与 | True and False |
False |
or |
逻辑或 | True or False |
True |
not |
逻辑非 | not True |
False |
in |
成员判断 | 'a' in 'abc' |
True |
& |
按位与 | 9 & 3 |
1 |
| ` | ` | 按位或 | `9 |
^ |
按位异或 | 9 ^ 3 |
10 |
~ |
按位取反 | ~9 |
-10 |
<< |
左移 | 9 << 1 |
18 |
>> |
右移 | 9 >> 1 |
4 |
常见错误排查指南
| 错误现象 | 大概率原因 | 解决方案 |
|---|---|---|
TypeError: unsupported operand type(s) |
不同类型的数据进行了不支持的运算(如字符串 + 数字) | 使用类型转换函数 int()、float()、str() 统一类型 |
ZeroDivisionError: division by zero |
试图除以0 | 使用 if 判断除数不为0再执行除法 |
ValueError: invalid literal for int() |
尝试将非数字字符串转换为整数 | 先用 isdigit() 校验输入内容 |
| 逻辑运算结果与预期不符 | 混淆了 and / or 的返回值(不一定是布尔值) |
记住:and 返回第一个假值或最后一个真值 |
| 位运算结果与预期不符 | 未考虑符号位和补码机制 | 使用较小的正数验证,确认逻辑正确后再扩展 |
生产/学习最佳实践
- 善用括号:当表达式包含多种运算符时,主动添加括号
()让计算顺序一目了然。代码是写给人类读的,其次才是给机器执行的。 - 避免“魔法数”:不要在代码中直接写出莫名其妙的数字,应该用有意义的常量名代替。例如
TAX_RATE = 0.13比直接写0.13更清晰。 - 优先使用
in代替多个or:条件判断中,if x == 1 or x == 2 or x == 3不如if x in [1, 2, 3]简洁优雅。 - 短路求值的妙用:可以用
or实现默认值设置——name = input_name or "匿名用户",当用户未输入时自动使用默认值。
🔜 下期预告
本期我们全面掌握了Python的运算符体系,并通过购物小票、蚂蚁森林证书、温度转换和BMI计算器四个实战项目,将理论知识落地为可运行的程序。至此,Python基础语法的核心内容(变量、类型、运算符)已全部学完。
下一期(第三期) ,我们将进入 流程控制 的世界——学习如何使用 if / elif / else 让程序拥有“判断能力”,如何使用 while 和 for 让程序具备“重复执行”的能力,以及如何用 break 和 continue 精细化控制循环流程。同时,我们还将完成计算器、猜数字、逢7拍手、五子棋棋盘和房贷计算器等一系列有趣的实战项目。敬请期待!
本期(基础语法·下篇)到此结束。 如果您在使用过程中发现任何问题或有改进建议,欢迎随时提出!
更多推荐


所有评论(0)