坚持用 清晰易懂的图解 + 代码语言,让每个知识点变得简单!
📌 呆头详细专栏系列
座右铭: "不患无位,患所以立。"
Python学习之基础语法2:掌握程序流程控制的艺术
- 前言
- 目录
- 一、顺序语句:程序的默认流程
- 二、条件语句:程序的"决策点"
- 三、循环语句:程序的"重复器"
- 四、综合案例:猜数字游戏
- 五、进阶技巧:Python的循环优化
- 六、实战案例:简单的待办事项管理器
前言
🔥 "灵根检测发现:阁下竟是万中无一的编程奇才!"
这是一个用修仙世界观解构Python学习的硬核专栏:
- 练气期:变量/循环/函数(基础心法)
- 筑基期:面向对象/异常处理(护体罡气)
- 金丹期:爬虫/数据分析(神通初成)
- 元婴期:Django/机器学习(开辟紫府)
✍️ 你将获得:
✅ 每章配套「渡劫雷法」(实战项目)
✅ 避免走火入魔的「心魔警示」(避坑指南)
✅ 飞升大能的「神识传承」(大佬代码赏析)
"三千大道,Py为尊。本座在此布道,助你斩尽BUG,证道代码金仙!"
(正文开始👇)
目录
一、顺序语句:程序的默认流程
顺序语句是最基本的程序流程------代码从上到下、一行接一行地执行。这就像阅读一本书,从第一页读到最后一页,不跳过任何内容。
python
# 顺序执行示例
print("第一步:准备材料")
print("第二步:混合面粉和鸡蛋")
print("第三步:加入牛奶搅拌")
print("第四步:倒入平底锅")
print("第五步:煎至两面金黄")
print("完成!美味的煎饼已经准备好了")
上面的代码会按照编写的顺序一步一步执行,没有任何"岔路"。这是最简单的程序流程,但实际应用中,我们通常需要更复杂的控制结构。
二、条件语句:程序的"决策点"
条件语句允许程序根据特定条件选择不同的执行路径。这就像在道路上遇到岔路口,根据路标(条件)决定走哪条路。
1.if语句:最基本的条件判断
python
# 基本if语句
age = 20
if age >= 18:
print("你已经成年了")
print("可以独立做决定了")
print("程序继续执行...") # 无论条件是否满足,这行都会执行
在上面的代码中,只有当age >= 18
为真时,缩进的代码块才会执行。
2.if-else语句:二选一的决策
python
# if-else语句
temperature = 35
if temperature > 30:
print("今天天气很热")
print("记得多喝水")
else:
print("今天天气不算太热")
print("适合户外活动")
print("程序继续执行...")
if-else语句提供了两条可能的执行路径:如果条件为真,执行if后的代码块;否则,执行else后的代码块。
3.if-elif-else语句:多条件判断
当我们需要检查多个条件时,可以使用if-elif-else结构:
python
# if-elif-else语句
score = 85
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
else:
grade = "F"
print(f"你的成绩等级是:{grade}")
在这个例子中,Python会从上到下检查每个条件,一旦找到第一个为真的条件,就执行对应的代码块,然后跳过剩余的条件检查。
4.嵌套条件语句:复杂决策树
条件语句可以嵌套,创建更复杂的决策结构:
python
# 嵌套条件语句
age = 25
has_ticket = True
if age >= 18:
if has_ticket:
print("你可以进入电影院")
else:
print("你需要先购买电影票")
else:
if has_ticket:
print("虽然你有票,但年龄不够,不能进入")
else:
print("你既没有达到年龄要求,也没有电影票")
嵌套条件可以表达复杂的逻辑关系,但过度嵌套会使代码难以阅读和维护。一般建议嵌套不超过3层,如果需要更复杂的逻辑,考虑重构代码或使用其他技术。
5.条件表达式(三元运算符):简洁的条件赋值
Python提供了一种简洁的条件表达式形式,也称为三元运算符:
python
# 条件表达式(三元运算符)
age = 20
status = "成年" if age >= 18 else "未成年"
print(status) # 输出: 成年
# 等价于以下if-else语句
if age >= 18:
status = "成年"
else:
status = "未成年"
条件表达式形式为:value_if_true if condition else value_if_false
。这种形式简洁明了,特别适合简单的条件赋值。
让我们通过一个时序图来看看条件语句的执行流程:
Python解释器 条件判断 True分支 False分支 评估条件 执行True分支代码 返回执行结果 执行False分支代码 返回执行结果 alt [条件为真] [条件为假] 继续执行后续代码 无论条件结果如何, 程序最终都会继续执行 Python解释器 条件判断 True分支 False分支
图2:条件语句执行时序图 - 展示了Python解释器如何处理条件判断和分支执行
三、循环语句:程序的"重复器"
循环允许我们重复执行代码块,这是处理集合数据和重复任务的强大工具。Python提供了两种主要的循环结构:for
循环和while
循环。
1.for循环:迭代已知次数
for
循环用于遍历序列(如列表、元组、字符串)或其他可迭代对象:
python
# 基本for循环
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
for fruit in fruits:
print(f"我喜欢吃{fruit}")
print("循环结束")
for
循环会遍历fruits
列表中的每个元素,将当前元素赋值给变量fruit
,然后执行循环体。
2.range()函数:生成数字序列
range()
函数常与for
循环一起使用,用于生成一个数字序列:
python
# 使用range()函数
# range(stop) - 从0开始,到stop-1结束
for i in range(5):
print(i) # 输出: 0, 1, 2, 3, 4
# range(start, stop) - 从start开始,到stop-1结束
for i in range(2, 6):
print(i) # 输出: 2, 3, 4, 5
# range(start, stop, step) - 从start开始,到stop-1结束,步长为step
for i in range(1, 10, 2):
print(i) # 输出: 1, 3, 5, 7, 9
range()
函数非常有用,特别是当你需要执行特定次数的循环或需要索引值时。
3.while循环:条件控制的循环
while
循环会一直执行,直到指定的条件变为假:
python
# 基本while循环
count = 0
while count < 5:
print(f"当前计数:{count}")
count += 1 # 增加计数器,避免无限循环
print("循环结束")
while
循环在每次迭代前检查条件。如果条件为真,执行循环体;如果为假,退出循环。
4.无限循环与break语句
有时我们需要创建一个无限循环,然后在特定条件下使用break
语句退出:
python
# 无限循环与break
while True:
user_input = input("请输入一个命令(输入'quit'退出): ")
if user_input.lower() == 'quit':
print("退出程序")
break # 跳出循环
print(f"你输入的命令是:{user_input}")
print("程序结束")
break
语句会立即终止当前循环,程序继续执行循环后的代码。
5.continue语句:跳过当前迭代
continue
语句用于跳过当前迭代的剩余部分,直接进入下一次迭代:
python
# continue语句
for i in range(10):
if i % 2 == 0: # 如果i是偶数
continue # 跳过当前迭代
print(i) # 只打印奇数: 1, 3, 5, 7, 9
在这个例子中,当i
是偶数时,continue
语句会跳过print(i)
,直接进入下一次迭代。
6.else子句:循环正常完成时执行
Python的循环可以有一个else
子句,当循环正常完成(不是通过break
退出)时执行:
python
# 循环的else子句
for i in range(5):
print(i)
else:
print("循环正常完成")
# 对比使用break的情况
for i in range(5):
if i == 3:
break
print(i)
else:
print("这条消息不会显示,因为循环被break中断了")
循环的else
子句在循环正常完成时执行,如果循环被break
语句中断,则不执行else
子句。
7.嵌套循环:多层迭代
循环可以嵌套,创建多层迭代结构:
python
# 嵌套循环
for i in range(1, 4): # 外层循环
for j in range(1, 4): # 内层循环
print(f"({i}, {j})", end=" ")
print() # 换行
# 输出:
# (1, 1) (1, 2) (1, 3)
# (2, 1) (2, 2) (2, 3)
# (3, 1) (3, 2) (3, 3)
嵌套循环在处理二维数据结构(如矩阵)或需要组合多个集合的元素时非常有用。
让我们通过一个象限图来比较不同类型的循环:
四、综合案例:猜数字游戏
现在,让我们将学到的顺序语句、条件语句和循环语句结合起来,创建一个简单而有趣的猜数字游戏:
python
import random
def guess_number_game():
"""简单的猜数字游戏"""
# 生成1到100之间的随机数
secret_number = random.randint(1, 100)
attempts = 0
max_attempts = 10
print("欢迎来到猜数字游戏!")
print(f"我已经想好了一个1到100之间的数字,你有{max_attempts}次机会猜出它。")
while attempts < max_attempts:
# 获取用户输入
try:
guess = int(input(f"请输入你的猜测(第{attempts + 1}次): "))
except ValueError:
print("请输入有效的数字!")
continue
# 增加尝试次数
attempts += 1
# 检查猜测
if guess < secret_number:
print("太小了!再大一点。")
elif guess > secret_number:
print("太大了!再小一点。")
else:
print(f"恭喜你!你猜对了!答案就是{secret_number}。")
print(f"你用了{attempts}次尝试。")
break
# 如果用完了所有尝试次数仍未猜对
if attempts == max_attempts and guess != secret_number:
print(f"很遗憾,你已用完所有{max_attempts}次尝试机会。")
print(f"正确答案是{secret_number}。")
# 询问是否再玩一次
play_again = input("想再玩一次吗?(y/n): ")
if play_again.lower() == 'y':
guess_number_game() # 递归调用,重新开始游戏
else:
print("谢谢参与!下次再见。")
# 启动游戏
if __name__ == "__main__":
guess_number_game()
这个猜数字游戏展示了我们学习的各种流程控制结构:
- 顺序语句:代码从上到下执行
- 条件语句 :使用
if-elif-else
检查猜测是大了、小了还是正确 - 循环语句 :使用
while
循环控制猜测次数,使用continue
跳过无效输入 - 异常处理 :使用
try-except
捕获无效输入 - 递归:通过函数调用自身实现游戏重新开始
五、进阶技巧:Python的循环优化
Python提供了一些特殊的工具和技巧,可以让我们的循环更加高效和优雅:
1.列表推导式:简洁的循环表达式
列表推导式是一种创建列表的简洁方式,可以替代某些for
循环:
python
# 传统for循环
squares = []
for i in range(1, 11):
squares.append(i ** 2)
print(squares) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# 等价的列表推导式
squares = [i ** 2 for i in range(1, 11)]
print(squares) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# 带条件的列表推导式
even_squares = [i ** 2 for i in range(1, 11) if i % 2 == 0]
print(even_squares) # [4, 16, 36, 64, 100]
列表推导式不仅代码更简洁,在某些情况下还更高效。
2.enumerate()函数:同时获取索引和值
当需要在循环中同时获取元素的索引和值时,enumerate()
函数非常有用:
python
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
# 传统方法
for i in range(len(fruits)):
print(f"{i+1}. {fruits[i]}")
# 使用enumerate()
for index, fruit in enumerate(fruits, start=1): # start参数设置起始索引
print(f"{index}. {fruit}")
enumerate()
函数返回一个迭代器,生成(索引, 值)对,使代码更加清晰和Pythonic。
3.zip()函数:并行迭代多个序列
当需要同时迭代多个序列时,zip()
函数非常有用:
python
names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]
cities = ["北京", "上海", "广州"]
for name, age, city in zip(names, ages, cities):
print(f"{name}今年{age}岁,住在{city}")
# 输出:
# Alice今年25岁,住在北京
# Bob今年30岁,住在上海
# Charlie今年35岁,住在广州
zip()
函数将多个序列"压缩"在一起,返回一个元组的迭代器,其中第i个元组包含每个序列的第i个元素。
六、实战案例:简单的待办事项管理器
让我们再来一个实战案例,综合运用顺序语句、条件语句和循环语句,创建一个简单的待办事项管理器:
python
def todo_manager():
"""简单的待办事项管理器"""
todos = [] # 存储待办事项的列表
while True:
# 显示菜单
print("\n===== 待办事项管理器 =====")
print("1. 查看所有待办事项")
print("2. 添加新的待办事项")
print("3. 标记待办事项为完成")
print("4. 删除待办事项")
print("5. 退出")
# 获取用户选择
choice = input("请选择操作 (1-5): ")
# 根据用户选择执行相应操作
if choice == '1':
# 查看所有待办事项
if not todos:
print("当前没有待办事项。")
else:
print("\n当前待办事项:")
for i, todo in enumerate(todos, 1):
status = "✓" if todo["completed"] else " "
print(f"{i}. [{status}] {todo['task']}")
elif choice == '2':
# 添加新的待办事项
task = input("请输入新的待办事项: ")
if task: # 确保输入不为空
todos.append({"task": task, "completed": False})
print(f"已添加: {task}")
else:
print("待办事项不能为空!")
elif choice == '3':
# 标记待办事项为完成
if not todos:
print("当前没有待办事项。")
else:
# 显示所有待办事项
print("\n当前待办事项:")
for i, todo in enumerate(todos, 1):
status = "✓" if todo["completed"] else " "
print(f"{i}. [{status}] {todo['task']}")
try:
index = int(input("请输入要标记为完成的待办事项编号: ")) - 1
if 0 <= index < len(todos):
todos[index]["completed"] = True
print(f"已将 '{todos[index]['task']}' 标记为完成")
else:
print("无效的编号!")
except ValueError:
print("请输入有效的数字!")
elif choice == '4':
# 删除待办事项
if not todos:
print("当前没有待办事项。")
else:
# 显示所有待办事项
print("\n当前待办事项:")
for i, todo in enumerate(todos, 1):
status = "✓" if todo["completed"] else " "
print(f"{i}. [{status}] {todo['task']}")
try:
index = int(input("请输入要删除的待办事项编号: ")) - 1
if 0 <= index < len(todos):
deleted_task = todos.pop(index)
print(f"已删除: {deleted_task['task']}")
else:
print("无效的编号!")
except ValueError:
print("请输入有效的数字!")
elif choice == '5':
# 退出程序
print("感谢使用待办事项管理器!再见!")
break
else:
print("无效的选择,请重新输入!")
# 启动待办事项管理器
if __name__ == "__main__":
todo_manager()
这个待办事项管理器展示了如何将顺序语句、条件语句和循环语句结合起来,创建一个实用的命令行应用程序。它使用了:
- 无限循环 :使用
while True
创建主程序循环 - 条件语句 :使用
if-elif-else
处理不同的用户选择 - 列表和字典:使用列表存储待办事项,使用字典存储每个待办事项的详细信息
- enumerate():在显示待办事项时同时获取索引和值
- 异常处理 :使用
try-except
捕获无效输入
总结与展望
我建议大家在学习流程控制时,不要只是机械地记忆语法,而是要理解每种结构的适用场景和内在逻辑。尝试用不同的方式解决同一个问题,比较它们的优缺点。这样,你不仅能掌握语法,还能培养编程直觉和代码品味。
在下一篇文章中,我们将探讨Python的函数和模块,这些是构建更大型、更复杂程序的基础。我们将学习如何将代码组织成可重用的单元,如何传递和处理数据,以及如何利用Python丰富的标准库和第三方库来简化开发。
编程是一段永无止境的学习之旅。每掌握一个新概念,都会打开一扇通往更广阔世界的门。希望这篇文章能为你的Python学习之旅提供一些帮助和启发。记住,最好的学习方式是动手实践------写代码、调试、改进,然后再写更多代码。只有这样,你才能真正掌握编程的艺术。
📢 如果你也喜欢这种"不呆头"的技术风格:
👁️ 【关注】 看一个非典型程序员如何用野路子解决正经问题
👍 【点赞】 给"不写八股文"的技术分享一点鼓励
🔖 【收藏】 把这些"奇怪但有用"的代码技巧打包带走
💬 【评论】 来聊聊------你遇到过最"呆头"的 Bug 是啥?
🗳️ 【投票】 决定我下一篇写"如何用游戏思维学编程"还是"和 ChatGPT 结对编程的翻车现场"
技术没有标准答案,让我们一起用最有趣的方式,写出最靠谱的代码! 🎮💻
参考链接
- Python官方文档 - 控制流工具
- Real Python - Python条件语句教程
- Python循环最佳实践
- Python编程:从入门到实践
- Python Cookbook - 流程控制与迭代
关键词标签
#Python基础 #流程控制 #条件语句 #循环语句 #Python编程