注:学习资料来源<尚硅谷>
视频:点击跳转
代码仓库:pythonStudy
在编程世界里,代码并不是只能一行行“傻傻地”顺序执行。我们经常需要根据条件做出选择,或者让某些操作重复执行,这就是“流程控制”的威力。Python 提供了清晰、灵活的分支与循环结构,让我们能轻松驾驭程序的走向。
今天这篇博客,会用最接地气的方式,带你彻底掌握 Python 的流程控制语句,包括单分支、双分支、多分支、嵌套分支、while 循环、for 循环、嵌套循环、continue 与 break 的配合,最后还会来一个综合实战案例,把知识串联起来。
一、分支结构:让程序学会“做选择”
分支结构也叫条件控制语句、选择语句。它的核心是:如果满足某个条件,就执行对应的代码块,否则执行别的。Python 中使用 if、elif、else 来构建分支。
特别注意:Python 依靠缩进(通常为 4 个空格)来区分代码块,而不是大括号。所以写分支时一定要保持缩进一致!
1.1 单分支:满足条件才执行
语法格式
if 判断条件:
条件成立时执行的代码1
条件成立时执行的代码2示例:判断是否成年
age = int(input('请输入你的年龄:'))
if age >= 18:
print('你是成年人')
print('成年人的世界,虽不容易,但很精彩!')
print('欢迎来学习 Python!')只有年龄 ≥18 时,那两行提示才会打印;最后一句无论如何都会执行。
1.2 双分支:二选一
语法格式
if 判断条件:
条件成立时执行的代码
else:
条件不成立时执行的代码示例
age = int(input('请输入你的年龄:'))
if age >= 18:
print('你是成年人')
print('成年人的世界,虽不容易,但很精彩!')
else:
print('你是未成年人')
print('好好加油,努力学习,未来可期!')
print('欢迎来学习 Python!')if 和 else 形成“不是 A 就是 B”的结构,程序只能进入其中一个分支。
1.3 多分支:多种情况,逐个判断
当一个条件不够、需要判断多个范围时,就轮到 elif 出场了。
语法格式
if 条件1:
代码块1
elif 条件2:
代码块2
elif 条件3:
代码块3
else: # else 可以省略
以上条件都不满足时执行示例:根据年龄判断人生阶段
age = int(input('请输入你的年龄:'))
if age <= 10:
print('你是幼儿')
elif age <= 18:
print('你是青少年')
elif age <= 30:
print('你是青年')
elif age <= 50:
print('你是中年')
elif age <= 60:
print('你是中老年')
else:
print('你是老年')注意条件顺序:Python 从上到下依次检查,一旦某个 elif 为 True,后续的 elif 和 else 都会被跳过。
1.4 嵌套分支:分支里面套分支
现实中判断往往更复杂,比如一个比赛报名系统需要同时判断年龄、体检报告和会员等级。
语法图解(简化结构)
if 外部条件:
if 内部条件A:
...
elif 内部条件B:
...
else:
...
else:
if 另一个条件:
...
else:
...实战案例:马拉松报名资格检查
age = int(input('请输入你的年龄:'))
has_report = input('您是否提交了体检报告?(是/否)')
level = int(input('请输入你的会员等级(1/2/3)'))
print('******⬇️程序的识别结果如下⬇️:******')
if 18 <= age <= 45:
print('✅️您的年龄符合比赛要求!')
if has_report == '是':
print('✅️您已提交体检报告!')
print('✅️您可以参加比赛!')
if level == 1:
print(f'😊尊敬的{level}会员,比赛结束后,您可以领取纪念T恤👕一件!')
elif level == 2:
print(f'😊尊敬的{level}会员,比赛结束后,您可以领取专业跑鞋👟一双!')
elif level == 3:
print(f'😊尊敬的{level}会员,比赛结束后,您可以领取运动耳机🎧一副!')
else:
print('❌您输入的会员等级不正确!')
elif has_report == '否':
print('❌您未提交体检报告,不能参加比赛!')
else:
print('❌您输入的体检报告有误!')
else:
print('❌抱歉,参赛年龄需要在18~45之间!')这个例子把多条件判断、嵌套分支组合在了一起,体现了分支结构的强大和清晰。
二、循环结构:让重复的事情自动化
循环用于让一段代码反复执行,直到某个条件不再满足。Python 提供了两种循环:while 和 for,各有适用场景。
2.1 while 循环:条件为真就一直跑
语法格式
while 循环条件:
条件成立时重复执行的代码执行逻辑
检查循环条件是否为 True
若为 True,执行循环体
执行完后再次检查条件
直到条件变为 False,结束循环
示例:打印 1~10 的问候
n = 1
while n <= 10:
print(f'第{n}次你好啊')
n += 1 # 必须改变条件变量,否则会死循环
print(f'循环结束,此时的 n = {n}')死循环警告:如果忘记写
n += 1,n永远等于 1,条件永远为 True,就会陷入无限循环。
趣味案例:密室逃脱
print('😦您现在身处密室,需要正确回答问题之后,才能逃出密室!')
riddle = '你是什么人?'
answer = '你的心上人'
guess = ''
while guess != answer:
print(f'问题:{riddle}')
guess = input('请输入答案:')
if guess == answer:
print('✅️答案正确,逃脱成功!')
else:
print('❌️回答错误,请再想想!')这个例子用 while 配合用户输入,直到猜对才退出。
2.2 for 循环:遍历可迭代对象
for 循环擅长依次取出序列(或可迭代对象)中的每一个元素,然后执行相应操作。
语法格式
for 临时变量 in 可迭代对象:
循环体什么是“可迭代对象”?
通俗理解,就像一盒水果,你可以一个一个取出来。能这样逐个取出元素的东西,就是可迭代对象,比如:
range()产生的数字序列字符串(字符序列)
列表、元组、字典等
示例:遍历 range
for n in range(1, 11): # range(1,11) 产生 1~10
print(f'第{n}次你好啊')
print(f'循环结束,最后的 n = {n}')示例:遍历字符串
for ch in 'abcdef':
print(ch)示例:遍历列表
nums = [1, 2, 3]
for i in nums:
print(i)
# 注意:不要在遍历时往列表里加新元素,容易死循环或导致意外动手小案例:简单的字符串加密/解密
利用字符的 Unicode 编码值加 1 实现“凯撒密码”式加密。
# 加密
text = input('📝请输入要加密的文字:')
secret = ''
for t in text:
secret += chr(ord(t) + 1) # ord 获取编码,chr 转回字符
print(f'㊙️加密后:{secret}')
# 解密
secret = input('📝请输入要解密的文字:')
text = ''
for s in secret:
text += chr(ord(s) - 1)
print(f'📃解密后:{text}')2.3 while 与 for 如何选?
三、嵌套循环:一层不够,再来一层
一个循环内部再写另一个循环,就是嵌套循环。外层循环执行一次,内层循环要完整地执行一轮。
经典案例:为期 30 天的健身计划
每天做 3 组仰卧起坐,用两种循环分别实现。
# for 循环实现
for day in range(1, 31):
print(f'********📅第{day}天********')
for group in range(1, 4):
print(f'💪这是第{group}组仰卧起坐')
print(f'✅第{day}天任务已完成!明天继续!\n')
print(f'🎉为期{day}天的健身计划完成,我的腹肌在闪闪发光!')
# while 循环实现
day = 1
while day <= 30:
print(f'********📅第{day}天********')
group = 1
while group <= 3:
print(f'💪这是第{group}组仰卧起坐')
group += 1
print(f'✅第{day}天任务已完成!明天继续!\n')
day += 1
print(f'🎉为期{day - 1}天的健身计划完成,我的腹肌在闪闪发光!')必会的嵌套循环:九九乘法表
利用 print() 的 end 参数控制结尾字符,可以让输出更整齐。
# 理解 end 参数
print('你好', end='') # 不换行
print('世界') # 输出:你好世界
print('你好', end='---')
print('世界') # 输出:你好---世界
print('\n====== 九九乘法表 ======')
for row in range(1, 10):
for col in range(1, row + 1):
print(f'{col}*{row}={col * row}', end='\t') # \t 是制表符
print() # 一行结束后换行四、循环控制符:continue 与 break
有时我们需要更精细地控制循环,比如跳过某次循环,或者提前终止整个循环。
continue:跳过本次循环的剩余语句,直接进入下一次循环判断。break:立即终止整个循环(只跳出当前所在的那层循环)。
4.1 continue 实例
print('=== continue 示例 ===')
for day in range(1, 5):
print(f'********第{day}天********')
print('吃饭')
if day == 2:
continue # 第2天不执行“睡觉”
print('睡觉')输出中,第 2 天只有“吃饭”,没有“睡觉”,其他天正常。
嵌套循环中的 continue:只影响它所在的那一层循环。
for day in range(1, 5):
print(f'********第{day}天********')
print('吃饭')
for item in range(1, 3):
print(f'面包{item}')
if day == 4 and item == 2:
continue # 仅跳过第4天、第2个面包后的牛奶
print(f'牛奶{item}')
print('睡觉')第 4 天第 2 次循环时,“牛奶 2”未打印,但内层循环继续,外层也不受影响。
4.2 break 实例
print('=== break 示例 ===')
for day in range(1, 5):
print(f'********第{day}天********')
print('吃饭')
if day == 2:
break # 第2天直接结束整个循环
print('睡觉')输出只有第 1 天的完整记录,第 2 天打印“吃饭”后就停掉了,第 3、4 天完全不会执行。
嵌套循环中的 break:同样只跳出内层循环。
for day in range(1, 5):
print(f'********第{day}天********')
print('吃饭')
for item in range(1, 3):
print(f'面包{item}')
if day == 4 and item == 2:
break # 跳出内层循环
print(f'牛奶{item}')
print('睡觉')第 4 天时,内层循环在 item==2 时遇到 break,直接结束内层循环,但外面的“睡觉”依然会打印。
五、综合案例:答题闯关挑战赛
最后,我们用一个大案例把所有知识串起来。需求是:
有 3 道题,每题最多答 3 次
用户可以随时输入
q退出答对一题进入下一关,答错扣次数,次数用完游戏结束
全部答对显示通关
print('🏆欢迎来到:答题闯关挑战赛(输入q可随时退出)\n')
# 题库
ques1, ans1 = 'Python中用于输出的函数是?', 'print'
ques2, ans2 = 'Python中用于表示逻辑“并且”的关键字是?', 'and'
ques3, ans3 = 'Python属于编译型还是解释型?', '解释型'
max_tries = 3 # 每关最多尝试次数
total_levels = 3 # 总关卡数
is_playing = True
for level in range(1, total_levels + 1):
print(f'********🎯第{level}关********')
# 根据关卡选择题目
if level == 1:
question, answer = ques1, ans1
elif level == 2:
question, answer = ques2, ans2
else:
question, answer = ques3, ans3
tries = 1
while tries <= max_tries:
user_input = input('📢' + question)
if user_input == answer:
print('✅回答正确!\n')
break
elif user_input == '':
print('⚠️您的输入为空,请重新作答!\n')
continue # 跳过扣次数,重新本轮
elif user_input == 'q':
print('👋您已退出游戏!\n')
is_playing = False
break
else:
leave = max_tries - tries
if leave > 0:
print(f'❌回答错误,您还剩{leave}次机会!\n')
tries += 1
continue
else:
print(f'😢挑战失败,正确答案是:{answer},游戏结束!')
is_playing = False
break
if not is_playing:
break
if is_playing:
print('🎉🎉🎉恭喜您!全部通关!🎉🎉🎉')这个案例包含了:
for循环遍历关卡while循环控制每关答题次数if/elif/else判断答案、空输入、退出指令continue跳过空输入和答错但不结束的情况break退出当前关卡或整体游戏标志变量
is_playing控制整个游戏流程
六、小结与练习建议
学完这篇,你应该能熟练运用:
单分支、双分支、多分支做条件判断
嵌套分支处理复杂逻辑
while循环用于未知次数的重复for循环遍历各种可迭代对象嵌套循环输出二维格式(如乘法表)
continue和break精细化控制循环流程
动手试试看:
修改比赛报名系统,增加一个“VIP 通道”判断(例如 VIP 不受年龄限制)。
用 while 循环重新实现一遍九九乘法表。
在答题游戏中增加第 4 关,并设计自己的题目。
思考:什么时候选 for,什么时候选 while?用代码验证你的想法。
流程控制是编程的骨架,熟练掌握后,你就能写出千变万化的逻辑。快打开你的 Jupyter Notebook 或 IDE,把上面的代码都敲一遍,让编程思维在指尖生长吧!