Python流程控制详解与实践
目录
Python与Shell详细对比分析
一、核心定位与设计目标
二、语法与编程范式对比
三、典型应用场景
四、执行效率与维护性
if语句
一、基础语法结构
二、核心规则与特性
三、不同分支类型详解
1. 单分支(仅if)
2. 双分支(if-else)
3. 多分支(if-elif-else)
四、高级用法与技巧
关系运算符
一、关系运算符(Comparison Operators)
核心特性:
二、逻辑运算符(Logical Operators)
核心特性:
三、常见应用场景
1. 条件语句(if判断)
2. 数据过滤
Python的循环
一、while循环
1. 基本语法
2. 执行流程
3. 典型用法
4. 注意事项
二、for循环
1. 基本语法
2. 执行流程
3. 典型用法
4. 注意事项
三、循环控制语句
1. break:立即退出整个循环
2. continue:跳过当前迭代,进入下一次循环
3. else块:循环正常结束后的收尾
四、while vs for循环对比
五、常见错误与规避
六、高级技巧
实际案例
难度级别 1:基础应用
案例 1:判断数字正负
案例 2:简单三元运算符
难度级别 2:组合条件
案例 3:成绩等级判断
案例 4:闰年判断
难度级别 3:综合逻辑
案例 5:用户输入验证
案例 6:智能温度建议
python提供了多种流程控制语句,其中包括了if语句、while循环、for循环、break和continue语句。这种流程控制在各语言中大同小异。以下将以Shell作为对照体来进行讲解:
Python与Shell详细对比分析
一、核心定位与设计目标
二、语法与编程范式对比
| 特性 | Shell | Python |
|---|---|---|
| 变量声明 | 直接赋值(如var="value") |
需显式赋值(如var = "value") |
| 条件判断 | 依赖[ ]或test命令(如if [ -f file ]) |
直接布尔表达式(如if os.path.exists(file)) |
| 循环结构 | 依赖管道符和命令组合(如for i in $(ls)) |
支持迭代器(如for file in os.listdir()) |
| 错误处理 | 默认忽略错误继续执行 | 异常捕获机制(try-except)强制处理错误 |
| 数据结构 | 仅支持简单字符串和数组 | 支持列表、字典、集合等复杂结构 |
三、典型应用场景
Shell优先场景
- 快速执行系统命令(如
grep "error" log.txt | wc -l); - 轻量级自动化任务(如定时备份、日志清理);
- 依赖Unix/Linux环境工具链的操作(如
awk/sed文本处理)。
Python优先场景
- 需要复杂逻辑(如多线程、网络请求);
- 跨平台兼容性需求(Windows/Linux通用脚本);
- 数据分析和科学计算(如
pandas处理CSV、numpy矩阵运算)。
四、执行效率与维护性
| 维度 | Shell | Python |
|---|---|---|
| 执行速度 | 直接调用系统命令,文件操作效率高 | 解释型语言,但可通过C扩展优化性能 |
| 调试难度 | 依赖echo调试,错误信息不直观 |
支持IDE调试和pdb模块 |
| 代码可读性 | 命令组合复杂时难以维护 | 强制缩进,代码结构化程度高 |
| 扩展能力 | 依赖外部命令,功能扩展受限 | 标准库+第三方库(如requests)生态丰富 |
if语句
一、基础语法结构
Python的if语句用于条件判断,语法结构如下:
if 条件1:
# 条件1成立时执行的代码
elif 条件2:
# 条件2成立时执行的代码
else:
# 所有条件均不成立时执行的代码
if:必选分支,用于检查第一个条件是否满足。elif(可选):可多次使用,检查其他条件(类似“否则如果”)。else(可选):兜底分支,所有条件不满足时执行。二、核心规则与特性
-
缩进强制要求
Python通过缩进(通常4个空格)标识代码块,省略缩进会引发IndentationError。if True: print("会报错!") # 缺少缩进 -
条件表达式类型
- 条件可以是直接布尔值(
True/False),或返回布尔值的表达式。 - 非布尔值会隐式转换:
0、None、空容器(如[]、"")视为False,其他视为True。 -
多条件组合
使用逻辑运算符and(与)、or(或)、not(非)连接多个条件。age = 25 if age >= 18 and age <= 60: print("成年人")
if 1: # 条件为True
if "hello": # 条件为True
if []: # 条件为False
三、不同分支类型详解
1. 单分支(仅if)
num = 10
if num > 0:
print("正数")
2. 双分支(if-else)
num = -5
if num >= 0:
print("非负数")
else:
print("负数")
3. 多分支(if-elif-else)
score = 85
if score >= 90:
print("优秀")
elif score >= 80:
print("良好")
elif score >= 60:
print("及格")
else:
print("不及格")
四、高级用法与技巧
-
单行
if语句(三元表达式)
适用于简单赋值或返回值的场景。# 语法:结果1 if 条件 else 结果2 status = "通过" if score >= 60 else "未通过" -
与
in关键字结合使用
检查元素是否存在于容器(如列表、字符串)中。fruits = ["apple", "banana", "cherry"] if "banana" in fruits: print("找到香蕉!") -
嵌套
if语句
在代码块内再次使用if判断,但需避免过度嵌套(一般不超过3层)。age = 20 if age >= 18: if age <= 60: print("可参与工作") else: print("已退休") -
类型与值双重验证
使用isinstance()检查变量类型。value = "123" if isinstance(value, str) and value.isdigit(): print("是数字字符串")
关系运算符
一、关系运算符(Comparison Operators)
用于比较两个值之间的关系,返回布尔值True或False。
| 运算符 | 名称 | 示例 | 说明 |
|---|---|---|---|
== |
等于 | 3 == 5 → False |
值相等返回True(注意类型严格匹配) |
!= |
不等于 | 3 != 5 → True |
值不相等时返回True |
> |
大于 | 10 > 5 → True |
左值大于右值时成立 |
< |
小于 | 10 < 5 → False |
左值小于右值时成立 |
>= |
大于等于 | 5 >= 5 → True |
左值≥右值时成立 |
<= |
小于等于 | 5 <= 3 → False |
左值≤右值时成立 |
核心特性:
-
链式比较
Python允许连续比较(如1 < x < 5),等价于(1 < x) and (x < 5)。x = 3 print(1 < x < 5) # 输出 True -
类型敏感
不同类型可能无法直接比较(如3 == "3"返回False)。print(3 == 3.0) # True(int与float数值相等) print(3 == "3") # False(类型不同)
二、逻辑运算符(Logical Operators)
用于组合多个布尔条件,构建复杂逻辑判断。
| 运算符 | 名称 | 示例 | 说明 |
|---|---|---|---|
and |
逻辑与 | (x > 5) and (x < 10) |
所有条件为True时返回True |
or |
逻辑或 | (x < 0) or (x > 100) |
至少一个条件为True时返回True |
not |
逻辑非 | not (x == y) |
反转布尔值(True变False,反之亦然) |
核心特性:
-
短路求值(Short-Circuiting)
and:若左侧为False,直接返回False,不计算右侧。or:若左侧为True,直接返回True,不计算右侧。-
返回实际值而非布尔值
and:返回第一个为False的值(若无则返回最后一个值)。or:返回第一个为True的值(若无则返回最后一个值)。
def check():
print("函数被调用")
return True
print(False and check()) # 输出 False(不执行check)
print(True or check()) # 输出 True(不执行check)
print(0 and 5) # 0(第一个假值)
print(3 and 5) # 5(全为真,返回最后一个)
print(0 or "hi") # "hi"(第一个真值)
三、常见应用场景
1. 条件语句(if判断)
age = 18
if age >= 18 and age <= 60:
print("允许进入")
2. 数据过滤
numbers = [10, 20, 30, 40]
filtered = [x for x in numbers if x > 15 and x % 4 == 0]
print(filtered) # 输出 [20, 40]
Python的循环
一、while循环
1. 基本语法
while 条件:
# 循环体代码
else:
# 当循环正常结束(非break退出)时执行的代码
2. 执行流程
- 检查条件是否为
True。 - 若为
True,执行循环体代码,然后回到步骤1。 - 若为
False,跳过循环体,执行else块(如果有)。
3. 典型用法
不确定次数的循环(如用户输入验证):
password = ""
while password != "secret":
password = input("请输入密码:")
print("登录成功!")
计数器控制循环:
count = 0
while count < 5:
print(f"当前计数:{count}")
count += 1
4. 注意事项
False。else块的特殊性:仅在循环正常结束时执行(未触发break)。二、for循环
1. 基本语法
for 变量 in 可迭代对象:
# 循环体代码
else:
# 循环正常结束时执行
2. 执行流程
- 从可迭代对象(如列表、字符串、字典等)中依次取出元素。
- 每次迭代将元素赋值给变量,执行循环体。
- 遍历完成后,执行
else块(如果有)。
3. 典型用法
遍历列表:
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
遍历字典:
person = {"name": "Alice", "age": 30}
for key in person: # 遍历键
print(key)
for value in person.values(): # 遍历值
print(value)
for k, v in person.items(): # 遍历键值对
print(f"{k}: {v}")
使用range()生成序列:
for i in range(5): # 0,1,2,3,4
print(i)
for i in range(2, 10, 3): # 2,5,8(步长3)
print(i)
4. 注意事项
三、循环控制语句
1. break:立即退出整个循环
# 搜索数字,找到后提前退出
numbers = [3, 7, 2, 9, 5]
target = 9
for num in numbers:
if num == target:
print("找到目标!")
break
else:
print("未找到")
2. continue:跳过当前迭代,进入下一次循环
# 打印1~10中的奇数
for i in range(1, 11):
if i % 2 == 0:
continue
print(i)
3. else块:循环正常结束后的收尾
# 检查列表是否全为偶数
nums = [2, 4, 6, 8]
for n in nums:
if n % 2 != 0:
print("存在奇数")
break
else:
print("全部是偶数")
四、while vs for循环对比
| 维度 | while循环 |
for循环 |
|---|---|---|
| 适用场景 | 不确定次数的循环(如等待条件变化) | 遍历已知的可迭代对象(如列表、字符串) |
| 循环条件 | 依赖显式的布尔表达式 | 自动处理可迭代对象的遍历 |
| 退出方式 | 条件变为False或手动break |
遍历完成或手动break |
| 性能 | 可能因条件计算产生额外开销 | 通常更高效(针对迭代优化) |
五、常见错误与规避
-
无限循环:
# 错误示例:缺少终止条件 while True: print("无限循环...") -
修改迭代中的列表:
# 错误示例:遍历时删除元素 lst = [1, 2, 3, 4] for num in lst: if num % 2 == 0: lst.remove(num) # 可能导致元素跳过 -
误用
else块:# 错误理解:else块在循环结束后总会执行 for i in range(3): if i == 10: break else: print("执行") # 实际会执行,因为未触发break
六、高级技巧
-
嵌套循环:
for i in range(3): for j in range(2): print(f"({i}, {j})") -
使用
enumerate()获取索引和值:fruits = ["apple", "banana", "cherry"] for index, fruit in enumerate(fruits): print(f"索引{index}: {fruit}") -
结合
zip()并行遍历:names = ["Alice", "Bob"] ages = [25, 30] for name, age in zip(names, ages): print(f"{name} is {age} years old")
实际案例
难度级别 1:基础应用
案例 1:判断数字正负
num = -5
if num > 0:
print("正数")
elif num < 0:
print("负数")
else:
print("零")
# 输出: 负数
案例 2:简单三元运算符
age = 18
status = "成年" if age >= 18 else "未成年"
print(status) # 输出: 成年
难度级别 2:组合条件
案例 3:成绩等级判断
score = 85
if score >= 90:
grade = "A"
elif 80 <= score < 90:
grade = "B"
elif 60 <= score < 80:
grade = "C"
else:
grade = "D"
print(f"成绩等级:{grade}") # 输出: B
案例 4:闰年判断
year = 2024
is_leap = (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)
print(f"{year}是闰年吗?{is_leap}") # 输出: True
难度级别 3:综合逻辑
案例 5:用户输入验证
username = "admin"
password = "123456"
# 验证用户名和密码长度,且不能包含空格
valid_user = len(username) >= 5 and ' ' not in username
valid_pass = len(password) >= 6 and ' ' not in password
print("验证通过" if valid_user and valid_pass else "验证失败")
# 输出: 验证通过
案例 6:智能温度建议
temp = 28
humidity = 70
# 组合温度和湿度条件
advice = "开空调" if temp > 30 or (temp > 25 and humidity > 75) else "开风扇"
print(advice) # 输出: 开风扇
作者:霖檬ing