写在前面:流程控制是编程的"交通规则",决定了代码执行的顺序和逻辑分支。掌握它,你就掌握了让程序"聪明"起来的核心能力。
一、什么是流程控制?
想象你在开车遇到路口——直行、左转、右转,或者遇到红灯需要等待。程序也是一样,需要根据不同的条件决定下一步做什么。
Python 的流程控制主要分为三大类:
| 类型 | 作用 | 关键词 |
|---|
| 顺序结构 | 代码从上到下依次执行 | 默认执行 |
| 分支结构 | 根据条件选择执行路径 | if / elif / else |
| 循环结构 | 重复执行某段代码 | for / while |
二、分支结构:程序的"选择题"
1. 单分支:if 语句
最基础的判断,满足条件就执行。
score=85
ifscore>=60:
print("及格了!") # 这行会被执行
执行流程图:
[score >= 60?]
/ \
是 否
/ \
[执行print] [跳过]
2. 双分支:if...else
非此即彼的选择。
age=17
ifage>=18:
print("已成年")
else:
print("未成年") # 输出这个
3. 多分支:if...elif...else
多个条件的层级判断。
grade=82
ifgrade>=90:
level="优秀"
elifgrade>=80: # 满足这个条件
level="良好"# 执行这里
elifgrade>=70:
level="中等"
else:
level="待提高"
print(f"评级:{level}") # 输出:评级:良好
⚠️ 重要提示:elif 只会执行第一个满足条件的分支,即使后面还有满足的也不会执行!
4. 嵌套分支:条件里的条件
is_member=True
purchase_amount=300
ifis_member:
ifpurchase_amount>=500:
discount=0.8
else:
discount=0.9
else:
discount=1.0
print(f"实际支付:{purchase_amount*discount}") # 270.0
三、循环结构:程序的"复读机"
1. for 循环:遍历神器
适合已知次数或遍历序列的场景。
# 遍历列表
fruits= ["苹果", "香蕉", "橙子"]
forfruitinfruits:
print(f"我喜欢吃{fruit}")
# 配合 range() 使用
foriinrange(5): # 0, 1, 2, 3, 4
print(f"第{i+1}次循环")
range() 的三种用法:
range(5) # 0, 1, 2, 3, 4
range(2, 6) # 2, 3, 4, 5
range(1, 10, 2) # 1, 3, 5, 7, 9 (步长为2)
2. while 循环:条件驱动
适合未知次数,只要条件满足就一直执行。
# 猜数字游戏示例
importrandom
target=random.randint(1, 100)
guess=0
attempts=0
whileguess!=target:
guess=int(input("猜一个1-100的数字:"))
attempts+=1
ifguess<target:
print("太小了!")
elifguess>target:
print("太大了!")
print(f"恭喜你!用了{attempts}次猜对了!")
3. 循环控制关键字
| 关键字 | 作用 | 使用场景 |
|---|
break | 立即终止整个循环 | 找到结果后提前退出 |
continue | 跳过当前迭代,继续下一次 | 过滤某些情况 |
else | 循环正常结束后执行(未被break) | 循环后的收尾工作 |
# break 示例:找第一个偶数
numbers= [1, 3, 5, 8, 9, 10]
fornuminnumbers:
ifnum%2==0:
print(f"找到偶数:{num}") # 找到8就停止
break
# continue 示例:只打印奇数
foriinrange(10):
ifi%2==0:
continue# 跳过偶数
print(i) # 只输出 1, 3, 5, 7, 9
# else 示例:循环的"善后工作"
foriinrange(3):
print(i)
else:
print("循环正常结束!") # 会执行
# 如果被 break,else 不会执行
foriinrange(3):
ifi==1:
break
else:
print("这行不会输出")
四、实用技巧与最佳实践
1. 列表推导式:循环的"极简版"
# 传统写法
squares= []
forxinrange(10):
squares.append(x**2)
# 列表推导式(一行搞定)
squares= [x**2forxinrange(10)]
# 带条件的推导式
even_squares= [x**2forxinrange(10) ifx%2==0]
# 结果:[0, 4, 16, 36, 64]
2. 避免死循环
# ❌ 错误:条件永远为真
whileTrue:
print("停不下来...")
# ✅ 正确:确保有退出条件
count=0
whilecount<5:
print(count)
count+=1# 别忘了更新条件变量!
3. 循环中的异常处理
data= [10, 20, "30", 40, "错误数据", 50]
foritemindata:
try:
result=100/int(item)
print(f"100 / {item} = {result}")
except (ValueError, ZeroDivisionError) ase:
print(f"处理 {item} 时出错:{e}")
continue# 跳过错误项,继续下一个
五、综合实战:学生成绩管理系统
students= {
"张三": [85, 90, 78],
"李四": [92, 88, 95],
"王五": [60, 65, 70]
}
print("📊 学生成绩分析报告")
print("="*30)
forname, scoresinstudents.items():
total=sum(scores)
average=total/len(scores)
# 评级判断
ifaverage>=90:
grade="A (优秀)"
elifaverage>=80:
grade="B (良好)"
elifaverage>=70:
grade="C (中等)"
else:
grade="D (需努力)"
print(f"\n🧑•🎓 {name}")
print(f" 成绩:{scores}")
print(f" 总分:{total} | 平均分:{average:.1f}")
print(f" 评级:{grade}")
print("\n"+"="*30)
print("✅ 分析完成!")输出结果:
📊 学生成绩分析报告
==============================
🧑•🎓 张三
成绩:[85, 90, 78]
总分:253 | 平均分:84.3
评级:B (良好)
🧑•🎓 李四
成绩:[92, 88, 95]
总分:275 | 平均分:91.7
评级:A (优秀)...
✅ 分析完成!
六、思维导图总结
Python流程控制
├── 分支结构 (if)
│ ├── 单分支:if
│ ├── 双分支:if...else
│ ├── 多分支:if...elif...else
│ └── 嵌套分支
│
└── 循环结构
├── for循环(遍历/已知次数)
│ ├── range()
│ ├── 遍历列表/字典
│ └── 列表推导式
│
├── while循环(条件/未知次数)
│ └── 注意避免死循环
│
└── 控制关键字
├── break(终止)
├── continue(跳过)
└── else(正常结束)
写在最后
掌握流程控制语句,你就拥有了构建复杂程序逻辑的基石。记住三个核心原则:
先画流程图,再写代码 —— 逻辑清晰,bug 更少
条件判断要穷尽 —— 考虑所有可能的输入
循环必须有出口 —— 避免陷入死循环
💡 练习建议:尝试用流程控制语句实现一个简单的文字冒险游戏,包含多个选择分支和循环战斗系统!
推荐阅读:
Python 官方文档:Control Flow
《流畅的Python》第2章
本文适合Python初学者,建议配合代码实践学习。如有疑问,欢迎在评论区留言讨论!