Day08 Python流程控制从入门到上瘾:if/match/while/for四件套,从B站登录一路打到猜数字游戏
摘要 :本文是《AI应用开发筑基》系列第八篇,聚焦Python编程的灵魂------流程控制 。前面Day01搞定了数据存储与运算,但程序不能总是"一条路走到黑"。本文拆解四个核心武器:if条件判断 (基本格式、if...else、if...elif...else三段式进化)、match...case模式匹配 (Python 3.10+新宠)、while循环 (条件驱动+while...else结构)、for循环(遍历驱动+range神器),每个知识点都配有可运行的实战案例,从B站登录验证到99乘法表再到猜数字游戏,手把手带你感受"代码有了逻辑"的快乐。适合零基础入门及需要系统梳理流程控制的技术人员阅读。

一、开篇:为什么"流程控制"是程序的灵魂?
回顾一下 Day01 我们学的东西------字面量、变量、数据类型、运算符、I/O 交互。这些很好,但它们有一个共同点:代码从上往下,一行一行,闷头执行到底。
python
name = input("请输入姓名: ")
print(f"你好, {name}")
这种代码只能处理"一条直线"的逻辑。但真实世界的程序需求远不止于此。
打开 B 站看看------登录的时候,账号密码都正确才让你进首页,否则弹错误提示。这是一个分支选择 。首页的轮播图,几张海报自动循环播放,这是一个重复执行。再想想你手机里的音乐 App------单曲循环、列表循环、随机播放,全是流程控制。
分支 和循环,合在一起就是编程里最核心的概念:流程控制。有了它,你的代码才不再是"一泻千里"的流水账,而是有了判断力、有了节奏感的真正程序。

二、条件判断:让代码学会"看情况行事"
2.1 if 基本格式------程序的第一道分叉口
场景很简单:只有满足条件,才干活。
python
if 条件:
条件成立时执行的代码
条件必须是一个布尔值(True / False)。True 就执行缩进块里的代码,False 就直接跳过。

注意:Python 通过缩进来描述代码归属,归属于 if 的语句需要在前面缩进(按 Tab 键,PyCharm 会自动转为 4 个空格)。
实战:B站登录验证(初版·只用 if)
需求:正确账号密码为 18888888888 / 666888,用户输入后判断是否登录成功。
python
# 预设正确账号密码
correct_phone = "18888888888"
correct_pwd = "666888"
# 接收用户输入
phone = input("请输入手机号: ")
pwd = input("请输入密码: ")
# 条件判断
if phone == correct_phone and pwd == correct_pwd:
print("✅ 登录成功,进入B站首页~")
这段代码最妙的地方在于 and 运算符------Day01 学的逻辑运算,现在派上用场了。"手机号对 并且 密码对"才放行,缺一不可。
但你发现问题了吗?只写了登录成功的情况,失败了什么都不提示。用户一脸懵逼------密码打错了也不知道错在哪。所以我们需要第二个分支。

2.2 if...else------非黑即白的二选一
python
if 条件:
条件成立时执行
else:
条件不成立时执行
两条路,必走其一。比写两个独立的 if 效率高------条件只判断一次,不会重复检查。
实战:B站登录验证(改进版·if...else)
把刚才的 B 站登录改成 if...else,登录失败也能给用户反馈:
python
# 预设正确账号密码
correct_phone = "18888888888"
correct_pwd = "666888"
# 接收用户输入
phone = input("请输入手机号: ")
pwd = input("请输入密码: ")
# if...else 条件判断
if phone == correct_phone and pwd == correct_pwd:
print("✅ 登录成功,进入B站首页~")
else:
print("❌ 用户名或密码错误,请重新输入!")

对比初版,只多了一个 else,用户体验直接拉满------再也不用猜"到底是我密码错了还是程序崩了"。
实战:闰年判断器
闰年规则有两层:
- 非整百年份,能被 4 整除就是闰年
- 整百年份,必须能被 400 整除才是闰年
python
year = int(input("请输入年份: "))
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
print(f"{year} 年是闰年")
else:
print(f"{year} 年是平年")
这里的条件表达式是一个经典组合------and 管"非整百年+被4整除",or 管"或者是整百年被400整除"。括号分组让逻辑一目了然,建议你也养成加括号的习惯,别考验自己和同事的眼力。
2.3 if...elif...else------多分支的终极形态
刚才的二选一很好,但现实往往是"多选一"。比如:判断一个数字是正数、负数、还是零------两个分支不够用。
这就引出 if...elif...else:
python
if 条件1:
操作1
elif 条件2:
操作2
elif 条件3:
操作3
else:
以上都不满足时的兜底

执行机制 :从上到下依次判断,命中第一个 True 就执行并跳出整段,后面的条件不再检查。所以条件的排列顺序有讲究------把最可能命中的、或者最特殊的条件放前面。
提示:elif 必须出现在 if 之后,不能独立存在。if 之后可以有 0 个或多个 elif,最后的 else 可有可无。
实战:正数/负数/零判断
python
num = int(input("请输入一个数字: "))
if num > 0:
print(f"{num} 是正数")
elif num < 0:
print(f"{num} 是负数")
else:
print(f"{num} 是零")
实战:多账号登录系统
支持三组账号 admin/666888、root/547527、zhangsan/123456:
python
username = input("请输入用户名: ")
password = input("请输入密码: ")
if username == "admin" and password == "666888":
print("✅ 管理员登录成功")
elif username == "root" and password == "547527":
print("✅ 超级用户登录成功")
elif username == "zhangsan" and password == "123456":
print("✅ 普通用户登录成功")
else:
print("❌ 用户名或密码错误")

2.4 综合案例:三角形类型判断
把条件判断的能力推到极限------输入三条边长,判断能构成什么三角形。
python
a = int(input("请输入第一条边长: "))
b = int(input("请输入第二条边长: "))
c = int(input("请输入第三条边长: "))
# 先判断能否构成三角形:任意两边之和大于第三边
if a + b > c and a + c > b and b + c > a:
# 能构成三角形,再判断类型
if a == b == c:
print("🔺 等边三角形")
elif a == b or a == c or b == c:
print("🔺 等腰三角形")
else:
print("🔺 普通三角形")
else:
print("❌ 无法构成三角形")
这里有两个亮点值得注意:
- 嵌套 if:外层判断能不能构成,内层判断什么类型,层次分明
a == b == c:Python 的链式比较,等价于a == b and b == c,写起来优雅多了
三、模式匹配 match...case:if...elif 的现代化替代方案
处理"星期几"这种多值等值判断时,if...elif 的写法是这样的:
python
day = int(input("请输入星期几(1-7): "))
if day == 1:
print("周一:开周会,定本周计划")
elif day == 2:
print("周二:专注开发")
elif day == 3:
print("周三:代码评审")
elif day == 4:
print("周四:技术分享")
elif day == 5:
print("周五:收尾+周报")
elif day == 6:
print("周六:学习充电")
elif day == 7:
print("周日:好好休息")
else:
print("输入错误")
七个分支写了七次 day ==,大量重复代码。Python 3.10 引入的 match...case 就是为解决这种场景而生的:

python
day = int(input("请输入星期几(1-7): "))
match day:
case 1:
print("周一:开周会,定本周计划")
case 2:
print("周二:专注开发")
case 3:
print("周三:代码评审")
case 4:
print("周四:技术分享")
case 5:
print("周五:收尾+周报")
case 6 | 7: # | 表示"或",匹配多个值
print("周末:好好放松")
case _: # _ 是通配符,兜底匹配
print("输入错误")
match...case 的三个核心符号:
| 符号 | 含义 | 示例 |
|---|---|---|
| ` | ` | 或,匹配多个值中的任意一个 |
_ |
通配符,匹配所有未命中情况 | case _: |
| 值 | 精确匹配 | case 1: |

实战:简易计算器
用 match...case 实现加减乘除运算,比 if...elif 清爽太多:
python
num1 = float(input("请输入第一个数: "))
op = input("请输入运算符(+ - * /): ")
num2 = float(input("请输入第二个数: "))
match op:
case "+":
print(f"{num1} + {num2} = {num1 + num2}")
case "-":
print(f"{num1} - {num2} = {num1 - num2}")
case "*":
print(f"{num1} * {num2} = {num1 * num2}")
case "/":
if num2 != 0:
print(f"{num1} / {num2} = {num1 / num2}")
else:
print("❌ 除数不能为0")
case _:
print("❌ 无效的运算符")
什么时候用 match 而不是 if...elif? 当你的判断条件是同一个变量对不同值的等值比较 时,match 更简洁。如果是范围判断(num > 0)、复杂逻辑组合(a > 0 and b < 10),还是老老实实用 if。
四、循环:让代码不知疲倦地重复执行
条件判断让代码有了"选择权",循环则让代码有了"耐力"。音乐 App 的单曲循环、B 站的轮播图、游戏里的主循环------本质上都靠循环实现。
Python 提供了两种循环语法:while (条件驱动)和 for(遍历驱动)。

4.1 while 循环------条件不满足,绝不罢休
python
while 条件:
循环体
执行逻辑:每次循环前先检查条件 → True 就执行循环体 → 再检查 → True 再执行 → 直到 False 才跳出。

while...else 结构
Python 的 while 还有一个很多人忽略的特性------可以搭配 else:
python
while 条件:
循环体
else:
循环正常结束后执行(不被 break 打断时才执行)
!在这里插入图片描述(https://i-blog.csdnimg.cn/direct/98275f26d9a742b2873074aae075d957.png#pic_center)
python
# 打印 10 遍 "人生苦短,我用Python ~"
i = 1
while i <= 10:
print(f"第{i}遍: 人生苦短,我用Python ~")
i += 1
else:
print("✅ 打印完成")
else 块只在循环正常结束 时执行------也就是说,如果循环被 break 打断,else 就不会触发。这个特性在某些"查找后判断是否找到"的场景里非常好用。
实战:计算 1~100 所有偶数的累加之和
python
num = 1
total = 0
while num <= 100:
if num % 2 == 0: # 过滤偶数
total += num
num += 1
print(f"1~100所有偶数之和为: {total}") # 输出: 2550
这个案例把 Day01 的运算符(%、+=)、if 条件判断、while 循环串在了一起。编程就是这样------基础知识点单独拆开都简单,组合在一起才是能力的分水岭。
4.2 for 循环------遍历才是 Python 的正统
while 靠条件驱动,for 靠遍历驱动------对一批数据逐个处理。
python
for 变量 in 可迭代对象:
循环体
else:
循环正常结束后执行(可选)

python
# 遍历字符串中的每个字符
word = "Python"
for ch in word:
print(ch, end=" ") # 输出: P y t h o n
range()------for 循环的最佳搭档
range(start, stop, step) 生成一个整数序列,是 for 循环里最常用的"数据源":
python
range(5) # 0, 1, 2, 3, 4(默认从0开始)
range(1, 6) # 1, 2, 3, 4, 5(左闭右开)
range(1, 10, 2) # 1, 3, 5, 7, 9(步长为2)

实战1:计算 1~100 所有奇数之和
python
total = 0
for i in range(1, 101, 2): # 1, 3, 5, ..., 99
total += i
print(f"1~100所有奇数之和为: {total}") # 输出: 2500
实战2:计算 100~500 之间所有 3 的倍数之和
python
total = 0
for i in range(100, 501):
if i % 3 == 0:
total += i
print(f"100~500之间所有3的倍数之和为: {total}")
4.3 嵌套循环------循环里的循环
外层循环体执行一次,内层循环完整地跑一圈。想象钟表:分针走一格,秒针要跑一整圈 60 秒。

实战:打印 m×n 的长方形
python
m = int(input("请输入行数: "))
n = int(input("请输入列数: "))
for i in range(m): # 外层:控制行
for j in range(n): # 内层:控制列
print("*", end="")
print() # 换行

小贴士 :
print("*", end="")中的end=""让 print 输出后不换行,默认的end="\n"会自动换行。这是打印图形类题目的必备技巧。
经典必练:九九乘法表
python
for i in range(1, 10): # 外层:第几行(1~9)
for j in range(1, i + 1): # 内层:第几列(1~当前行号)
print(f"{j}×{i}={i*j}", end="\t")
print() # 每行结束换行
输出效果:
1×1=1
1×2=2 2×2=4
1×3=3 2×3=6 3×3=9
...
1×9=9 2×9=18 3×9=27 ... 9×9=81
关键细节:内层 range(1, i + 1) 中的上限 i + 1 会随着行号增大而增大,这就是"不等宽三角形"的精髓。

4.4 综合案例 1:登录重试系统
把循环和条件判断真正结合起来------登录失败不退出,反复重试直到成功:

python
# 预存合法账号
accounts = {
"admin": "666888",
"zhangsan": "123456",
"taoge": "888666"
}
while True:
username = input("请输入用户名: ").strip()
password = input("请输入密码: ").strip()
# 空值校验
if username == "" or password == "":
print("⚠️ 用户名和密码不能为空,请重新输入!")
continue # 跳过本次循环,回到开头
# 验证账号密码
if username in accounts and accounts[username] == password:
print("✅ 登录成功,进入B站首页~")
break # 登录成功,跳出循环
else:
print("❌ 用户名或密码错误,请重新输入!")
这个案例引入了两个新武器:
continue:跳过本次循环剩余代码,直接进入下一轮break:直接跳出整个循环- 字典
accounts:用数据结构替代一长串 if...elif
4.5 综合案例 2:猜数字游戏
终极实战------程序生成一个 1~100 的随机数,你来猜:
python
import random
target = random.randint(1, 100) # 生成 1~100 的随机数
guess_count = 0
print("🎯 猜数字游戏开始!范围:1 ~ 100")
while True:
guess = int(input("请输入你猜的数字: "))
guess_count += 1
if guess > target:
print("📉 猜大了,再试试!")
elif guess < target:
print("📈 猜小了,再试试!")
else:
print(f"🎉 恭喜你猜对了!答案就是 {target},你一共猜了 {guess_count} 次")
break

这里面 Day01~Day08 的知识全部用上了:变量、数据类型、I/O、运算符、if...elif...else、while 循环、random 模块------一条完整的知识链。
五、Day08 技术栈总结
| 模块 | 核心内容 | 关键技术点 | 典型场景 |
|---|---|---|---|
| 条件判断 | if / if...else / if...elif...else | 分支逻辑、条件顺序、嵌套if | 登录验证、权限判断、分类处理 |
| 模式匹配 | match...case | ` | 或匹配、_` 通配符 |
| while循环 | 条件驱动循环 | 循环变量更新、死循环防范、while...else | 登录重试、游戏主循环 |
| for循环 | 遍历驱动循环 | range()、遍历字符串/列表 | 累加求和、批量处理 |
| 嵌套循环 | 循环中的循环 | 外层行/内层列、时间复杂度 | 九九乘法表、矩阵遍历 |
| 循环控制 | break / continue | 跳出循环 vs 跳过本次 | 登录成功跳出、空值跳过 |
六、写在最后
流程控制是编程的"脊椎"。没有它,你写的代码就是一根筋的流水账;有了它,代码才有了判断力、有了节奏、有了应对复杂场景的能力。
今天的内容量不小------三个条件判断语法、一个模式匹配新特性、两种循环、两种控制关键字、嵌套循环,七个实战案例。但好消息是,这些知识点你后面每天都会用到。if 会出现在每一段逻辑判断里,for 会出现在每一次数据处理里,break/continue 会让你的循环更灵活。
建议这样巩固:
- 先独立敲一遍九九乘法表------练嵌套循环
- 再独立敲一遍猜数字游戏------练完整流程控制
- 把登录重试改成限制 3 次机会------练 break 和计数逻辑
感谢阅览
码字不易,如果这篇文章对你有帮助,欢迎点赞、收藏、关注。
有任何问题、踩过的坑、或者你写的更有意思的案例,欢迎在评论区聊聊。一起进步。