分支和循环结构实战
分支和循环结构实战
通过前面两节课的学习,大家对 Python 中的分支结构和循环结构已经有了初步的认知。分支结构和循环结构是构造程序逻辑的基础,它们的重要性不言而喻,但在实际开发中,很多同学在理解语法后仍感到“无从下手”。解决的关键就是:理解+实战+练习!
🔍 理解:为什么我们需要分支与循环?
- 分支结构:根据不同的条件选择不同的执行路径 → 就像人在做判断,“如果这样,那就……否则就……”
- 循环结构:反复执行同一组操作 → 就像人在重复劳动,“直到……为止,一直做这件事”
没有它们,程序只能一条道走到底,无法智能响应用户输入,也无法处理重复任务。
🛠 使用场景与实战技巧汇总
| 场景 | 推荐结构 | 示例说明 |
|---|---|---|
| 判断是否为素数 | 嵌套 for+if+break |
用平方根减少循环次数 |
| 求斐波那契数列 | for+变量递推 |
多变量同时赋值技巧 |
| 数字拆解(个位、十位等) | 数学运算 // % |
拆分数位常用于密码、验证码等 |
| 枚举所有组合方案 | 多层嵌套 for |
穷举法搜索有限解空间 |
| 直到猜对/满足条件 | while 循环 |
常配合 break 跳出 |
| 模拟博弈或交互式游戏 | 综合 if、while、随机数 |
模拟真实行为流程 |
🎯 实战案例教学讲解
✅ 例子1:100以内的素数
🔍 场景说明:
判断一个数是否为素数,是算法面试、刷题和系统安全等场景中的经典需求。
💡 实战技巧:
- 从 2 开始枚举;
- 优化判断上界为
√n; is_prime用布尔标志配合break;
for num in range(2, 100):
is_prime = True
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
is_prime = False
break
if is_prime:
print(num)
✅ 例子2:斐波那契数列(前 20 项)
🔍 场景说明:
在算法题、金融建模、物理结构设计中广泛使用,如“兔子繁殖”、“黄金分割”。
💡 实战技巧:
- 初始值
a = 0, b = 1; a, b = b, a + b是同时更新的语法糖;for _ in range(n)是不关心计数器变量时的惯用写法。
a, b = 0, 1
for _ in range(20):
a, b = b, a + b
print(a)
✅ 例子3:水仙花数(阿姆斯特朗数)
🔍 场景说明:
数位运算题常见于笔试与项目中,如银行卡校验、验证码解析。
💡 实战技巧:
% 10得个位;// 10 % 10得十位;- 整体思路是拆数位 → 做乘方 → 累加判断;
- 一般固定为 3 位,也可扩展为 N 位水仙花数搜索器。
for num in range(100, 1000):
low = num % 10
mid = num // 10 % 10
high = num // 100
if num == low ** 3 + mid ** 3 + high ** 3:
print(num)
✅ 例子3拓展:正整数的反转
🔍 场景说明:
常用于身份证号反转、二维码逆序处理、数字回文判断等。
💡 实战技巧:
- 循环提取末位;
reversed_num = reversed_num * 10 + num % 10是关键递推式;- 用
while num > 0:控制反转流程。
num = int(input('num = '))
reversed_num = 0
while num > 0:
reversed_num = reversed_num * 10 + num % 10
num //= 10
print(reversed_num)
✅ 例子4:百钱百鸡问题
🔍 场景说明:
典型的穷举法题目,训练循环嵌套、优化搜索范围。
💡 实战技巧:
- 小鸡的数量是 3 的倍数,先设
z = 0~99 step 3; - 提前利用
z = 100 - x - y减少嵌套层级; - 条件判断中融合数学规则,提高效率。
for x in range(0, 21):
for y in range(0, 34):
z = 100 - x - y
if z % 3 == 0 and 5 * x + 3 * y + z // 3 == 100:
print(f'公鸡: {x}只, 母鸡: {y}只, 小鸡: {z}只')
✅ 例子5:CRAPS 赌博游戏模拟器
🔍 场景说明:
综合项目实战:涉及输入校验、循环控制、随机数模拟、资产状态判断。
💡 实战技巧:
random.randrange(1, 7)模拟骰子;while money > 0:是典型资产控制;- 嵌套
while True:处理未决的下一步操作; - 使用清晰的结构组织流程:下注 → 摇点 → 判断 → 收益/亏损。
import random
money = 1000
while money > 0:
print(f'你的总资产为: {money}元')
while True:
debt = int(input('请下注: '))
if 0 < debt <= money:
break
first_point = random.randrange(1, 7) + random.randrange(1, 7)
print(f'\n玩家摇出了{first_point}点')
if first_point in (7, 11):
print('玩家胜!\n')
money += debt
elif first_point in (2, 3, 12):
print('庄家胜!\n')
money -= debt
else:
while True:
current_point = random.randrange(1, 7) + random.randrange(1, 7)
print(f'玩家摇出了{current_point}点')
if current_point == 7:
print('庄家胜!\n')
money -= debt
break
elif current_point == first_point:
print('玩家胜!\n')
money += debt
break
print('你破产了, 游戏结束!')
✅ 总结与学习建议
🎓 知识回顾:
| 内容类型 | 应用要点 |
|---|---|
| 分支结构 | 多条件决策(if-elif-else),用于执行路径控制 |
| 循环结构 | 重复执行任务(for/while),配合 break/continue 进行流程控制 |
| 实战技巧 | 使用组合结构解决实际问题(如穷举、模拟、校验等) |
| 数学技巧 | 数位分解、公式运算、边界优化 |
🧠 最佳实践建议
- 多做实战题:不能只读代码,要亲自写出类似的逻辑;
- 拆解问题思维:能将一个问题拆成“判断 + 循环 +输出”的组合;
- 善用调试输出:中间变量多打印,查错更方便;
- 写规范好读的代码:如缩进对齐、变量命名清晰、逻辑层次分明;
- 尝试自己“造题”再写:想象一个生活场景,试着用程序解决它。
🎯 下一目标:函数与模块
你已经能写出结构复杂的程序了,接下来,我们将学习:
- 如何将重复代码封装成函数
- 如何拆分程序成模块
- 如何传递参数和返回值
这将带你走向“更大规模、可维护”的编程世界!
如需本节内容的 PPT、PDF 打印版或编程题练习册,请随时告诉我。