04流程控制语句

04流程控制语句

_

注:学习资料来源<尚硅谷>

视频:点击跳转

代码仓库:pythonStudy

在编程世界里,代码并不是只能一行行“傻傻地”顺序执行。我们经常需要根据条件做出选择,或者让某些操作重复执行,这就是“流程控制”的威力。Python 提供了清晰、灵活的分支与循环结构,让我们能轻松驾驭程序的走向。

今天这篇博客,会用最接地气的方式,带你彻底掌握 Python 的流程控制语句,包括单分支、双分支、多分支、嵌套分支、while 循环、for 循环、嵌套循环、continue 与 break 的配合,最后还会来一个综合实战案例,把知识串联起来。


一、分支结构:让程序学会“做选择”

分支结构也叫条件控制语句、选择语句。它的核心是:如果满足某个条件,就执行对应的代码块,否则执行别的。Python 中使用 ifelifelse 来构建分支。

特别注意: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,后续的 elifelse 都会被跳过。

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 提供了两种循环:whilefor,各有适用场景。

2.1 while 循环:条件为真就一直跑

语法格式

while 循环条件:
    条件成立时重复执行的代码

执行逻辑

  1. 检查循环条件是否为 True

  2. 若为 True,执行循环体

  3. 执行完后再次检查条件

  4. 直到条件变为 False,结束循环

示例:打印 1~10 的问候

n = 1
while n <= 10:
    print(f'第{n}次你好啊')
    n += 1   # 必须改变条件变量,否则会死循环
print(f'循环结束,此时的 n = {n}')

死循环警告:如果忘记写 n += 1n 永远等于 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 如何选?

场景

推荐循环

知道要循环的具体次数,或遍历已有序列

for 循环

循环次数未知,需要根据条件动态终止

while 循环

需要不断读取用户输入,直到满足某种退出条件

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 循环遍历各种可迭代对象

  • 嵌套循环输出二维格式(如乘法表)

  • continuebreak 精细化控制循环流程

动手试试看

  1. 修改比赛报名系统,增加一个“VIP 通道”判断(例如 VIP 不受年龄限制)。

  2. 用 while 循环重新实现一遍九九乘法表。

  3. 在答题游戏中增加第 4 关,并设计自己的题目。

  4. 思考:什么时候选 for,什么时候选 while?用代码验证你的想法。

流程控制是编程的骨架,熟练掌握后,你就能写出千变万化的逻辑。快打开你的 Jupyter Notebook 或 IDE,把上面的代码都敲一遍,让编程思维在指尖生长吧!

05函数入门 2026-04-24
03Python核心基础 2026-04-23

评论区