这一篇非常实用。很多人刚学循环时,会觉得循环一旦开始,就只能老老实实从头跑到尾。其实不是。很多时候,程序运行到一半,你可能想:
提前结束 跳过这一次 或者先把位置留着,后面再补
这时候,就要轮到今天这三个关键词上场了:
breakcontinuepass
前面你已经学会了 while 和 for。
你知道循环的本质,就是让程序重复执行一段代码。 也知道 range() 可以帮你生成一段数字序列,让循环更方便。
可真实程序里,循环并不总是“从头跑到尾”这么简单。
比如:
找到目标以后,就不用再找了 碰到无效数据,这一轮先跳过 代码结构先写出来,里面内容以后再补
这三类需求非常常见。 而 Python 里,刚好有三个对应的工具:
break 用来提前结束循环continue 用来跳过当前这一轮pass 用来先占位置,暂时什么都不做
这三个词看起来不长, 但如果你把它们用顺了,循环会灵活很多。
一、先用一句话区分这三个词
这是这一篇最重要的一句话,你可以先记下来。
break:整段循环,直接结束continue:当前这一轮,立刻跳过pass:什么也不做,先占个位置
只要你把这三句的感觉抓住, 后面的例子就不会乱。
二、先讲 break:提前结束循环
break 的作用非常直接。
它的意思就是:
一旦执行到这里,整个循环立刻停止。
注意,是整个循环停止。 不是跳过一次,而是直接结束。
先看一个最简单的例子:
for i in range(1, 6): print(i)if i == 3:break
运行结果会是:
123
为什么只打印到 3。
因为当 i == 3 时,程序执行了 break。 而 break 的意思就是:
后面别循环了,直接结束整个循环
所以 4 和 5 根本没机会再出现。
三、把 break 翻译成人话,会特别好懂
还是刚才这段代码:
for i in range(1, 6): print(i)if i == 3:break
你可以直接翻译成:
从 1 到 5 依次处理。 如果走到 3,就立刻停下,不往后继续了。
这就是 break 的本质。
所以你以后看到 break, 脑子里可以直接浮现一句话:
到这里为止,整个循环收工
四、break 最适合“找到目标就停”的场景
比如你在一组数据里找某个东西。 一旦找到了,就没必要再继续往后找了。
来看一个很简单的例子:
for char in'Python': print(char)if char == 'h':break
输出会是:
Pyth
因为循环走到 h 的时候,直接停了。
这个例子特别能说明 break 的价值:
不是把所有内容都处理完 而是处理到关键位置就结束
这在查找、匹配、验证场景里特别常见。
五、再看一个 while 里的 break
break 不只给 for 用,while 里也一样能用。
比如:
count = 1while count <= 10: print(count)if count == 4:break count += 1
输出结果会是:
1234
这里的逻辑很清楚:
虽然 while 本来打算跑到 10, 但当 count == 4 时,程序执行了 break,于是整段循环提前结束。
所以你要记住:
break 不管你原来的循环条件是什么 只要执行到它,循环立刻停
六、实操,做一个“输入密码直到正确”为止的程序
这个场景特别经典,也很像真实业务。
whileTrue: password = input('请输入密码:')if password == '123456': print('密码正确')break
这里你可能会问,为什么写了一个:
whileTrue:
这不是永远为真吗。
对,表面上是。 但这里真正控制结束的,不再是 while 后面的条件, 而是循环内部的 break。
逻辑是:
先一直让用户输入 如果密码正确,就打印提示 然后执行 break,结束循环
这个例子特别值得体会。 因为它说明一个很重要的点:
循环结束,不一定只能靠条件自然变成 False 也可以在中途用 break 主动结束
七、continue:跳过当前这一轮
讲完 break,再来看第二个关键词:
continue
它的作用是:
跳过当前这一轮后面还没执行的代码,直接进入下一轮。
注意,它和 break 最大的区别是:
break 是整个循环结束continue 是只跳过这一次,循环还会继续
先看例子:
for i in range(1, 6):if i == 3:continue print(i)
输出结果会是:
1245
为什么没有 3。
因为当 i == 3 时,程序执行了 continue。 这意味着:
这一轮剩下的代码不执行了,直接进入下一轮
所以 3 这一轮的 print(i) 被跳过去了。
八、把 continue 翻译成人话,也特别好懂
还是刚才的例子:
for i in range(1, 6):if i == 3:continue print(i)
你可以翻译成:
从 1 到 5 依次处理。 如果遇到 3,这一轮先跳过,直接看下一轮。
所以以后你看到 continue, 脑子里可以直接理解成:
这一次不做了,下一次继续
这和 break 的“全部结束”完全不是一个意思。
九、continue 最适合“跳过无效情况”的场景
比如:
遇到空输入,不处理 遇到某个不想要的数据,直接跳过去 遇到特殊值,这一轮略过
来看一个特别适合新手理解的例子:
for char in'Python':if char == 'o':continue print(char)
输出会是:
Pythn
因为碰到 o 时,这一轮被跳过了。
这个场景你可以理解成:
大部分字符都正常处理 但某些特殊字符先忽略
这正是 continue 很常见的用法。
十、continue 在 while 里也能用,但要特别小心
比如:
count = 0while count < 5: count += 1if count == 3:continue print(count)
输出结果会是:
1245
这和前面的 for 效果类似。 当 count == 3 时,这一轮后面的 print(count) 被跳过了,程序直接进入下一轮。
不过这里有个特别重要的提醒:
在 while 里用 continue 时,一定要注意变量更新的位置。
如果你写成这样:
count = 0while count < 5:if count == 3:continue count += 1 print(count)
这就容易出问题。 因为当 count == 3 时,会一直卡在那一轮,永远跳不过去,可能造成死循环。
所以对新手来说,一个特别稳的习惯是:
在 while 里用 continue 时,先确认控制条件的变量已经能正常变化
十一、break 和 continue 最容易混的地方
这个一定要单独讲清楚。
比如下面这段:
for i in range(1, 6):if i == 3:break print(i)
输出是:
12
因为走到 3,整个循环就结束了。
而这段:
for i in range(1, 6):if i == 3:continue print(i)
输出是:
1245
因为走到 3,只跳过这一轮,后面还继续。
所以一句话再压缩一下:
break 是整场结束continue 是这轮跳过
你以后只要拿这句话对照,基本就不会乱。
十二、pass:先占位置,什么都不做
接下来是第三个词:
pass
这个最容易让新手觉得奇怪。 因为它看起来不像 break、continue 那么“有动作”。
pass 的作用就是:
什么都不做,先占个位置
比如下面这段代码:
ifTrue:pass
程序不会报错,也不会输出任何东西。 因为 pass 就是单纯告诉 Python:
这里我知道应该有代码 但我现在先不写内容 你先别报错
十三、为什么需要 pass
因为 Python 的语法要求,有些地方你不能空着。
比如:
ifTrue:
这样直接结束是不行的,程序通常会报错。 因为 if 后面必须有一个缩进代码块。
但如果你暂时还没想好写什么, 或者只是先把结构搭出来, 就可以这样:
ifTrue:pass
这就合法了。
所以 pass 的价值就在于:
帮你把代码结构先搭起来,内容以后再补
十四、pass 最适合“先写框架,后补内容”的场景
比如你现在想先把判断结构写出来:
score = int(input('请输入成绩:'))if score >= 90:passelif score >= 60:passelse:pass
虽然这段代码现在没做任何事, 但结构已经搭好了。
你后面就可以慢慢往里面填:
优秀时做什么 及格时做什么 不及格时做什么
对新手来说,pass 特别适合拿来“先搭骨架”。
十五、pass 和 continue 完全不是一回事
这个地方特别容易误会。
因为有些人会想:
既然 pass 什么都不做, 那它是不是就等于跳过这一轮
不是。
先看这个:
for i in range(1, 4):if i == 2:pass print(i)
输出会是:
123
因为 pass 什么都没做, 程序还是会继续执行后面的 print(i)。
再看 continue:
for i in range(1, 4):if i == 2:continue print(i)
输出会是:
13
因为 continue 是直接跳过这一轮后面的代码。
所以你一定要分清:
pass 是“什么都不做,但继续往下走”continue 是“这一轮后面别做了,直接进下一轮”
这是完全不同的行为。
十六、break、continue、pass 放在一起对比一下
来看一个特别适合比较的小练习。
先看 break:
for i in range(1, 6):if i == 3:break print(i)
输出:
12
再看 continue:
for i in range(1, 6):if i == 3:continue print(i)
输出:
1245
再看 pass:
for i in range(1, 6):if i == 3:pass print(i)
输出:
12345
这个对比特别清楚:
break:3 一到,整个循环停continue:3 这一轮跳过pass:3 这一轮不做特殊处理,照常继续
你最好把这三段亲手跑一遍, 感觉会特别直观。
十七、实操,做一个“找到目标就停止”的练习
这个特别适合练 break。
for char in'Python': print(f'正在检查:{char}')if char == 'h': print('找到目标,停止查找')break
输出大概会是:
正在检查:P正在检查:y正在检查:t正在检查:h找到目标,停止查找
这个例子特别能帮助你建立 break 的真实感:
不是循环自然结束 而是中途主动停止
十八、实操,做一个“跳过空格字符”的练习
这个适合练 continue。
text = 'I love Python'for char in text:if char == ' ':continue print(char)
输出时,空格就不会被打印出来。
这个例子特别好, 因为它非常贴近“跳过无效字符”的实际场景。
你也可以自己改成跳过某个字母,比如跳过 o:
text = 'I love Python'for char in text:if char == 'o':continue print(char)
这会更有助于你理解 continue 的作用。
十九、实操,做一个“先写框架再补内容”的练习
这个适合练 pass。
score = int(input('请输入成绩:'))if score >= 90:passelif score >= 60:passelse:pass
虽然现在运行时不会有实际输出, 但这个程序结构已经写好了。
你可以下一步自己补内容:
score = int(input('请输入成绩:'))if score >= 90: print('优秀')elif score >= 60: print('及格')else: print('不及格')
所以你要明白:
pass 不是拿来“真正解决问题”的 而是拿来“先把结构放着”的
二十、while 里用 break 是非常高频的写法
这个场景你后面会经常见到。
比如下面这个程序:
whileTrue: text = input('请输入内容,输入 exit 结束:')if text == 'exit':break print(f'你输入的是:{text}')
这个程序的逻辑是:
只要用户没输入 exit,就一直循环 一旦输入 exit,就执行 break,结束整个循环
这种写法特别经典, 以后你做菜单、交互输入、命令行程序时,经常会见到。
所以你现在就可以开始熟悉这个模式:
while True + 条件成立时 break
二十一、新手最容易犯的几个错误
第一个错误,把 break 和 continue 混了。
你一定要反复记:
break 是整个结束continue 是当前这轮跳过
第二个错误,在 while 里乱用 continue,导致控制变量没有更新,最后死循环。
这个前面已经提过了,一定要特别小心。
第三个错误,以为 pass 等于跳过循环。
不是。pass 只是“什么也不做”,程序还是会继续往后执行。
第四个错误,想先写结构却忘了 pass,结果代码直接报错。
比如:
if score >= 60:
这种会报错。 如果你暂时没内容,就要补一个:
if score >= 60:pass
二十二、今天一定要亲手完成的 4 个练习
第一个,break 练习。
for i in range(1, 6):if i == 4:break print(i)
第二个,continue 练习。
for i in range(1, 6):if i == 4:continue print(i)
第三个,pass 练习。
for i in range(1, 4):if i == 2:pass print(i)
第四个,while + break 练习。
whileTrue: text = input('请输入内容,输入 q 退出:')if text == 'q':break print(f'你输入的是:{text}')
这四个练习特别值得你现在就敲一遍。 因为它们正好把今天三个关键词的核心场景都覆盖了。
二十三、再做一个综合小练习
下面这个程序很适合作为今天的收尾。
需求:
不断让用户输入内容。 如果输入空字符串,就跳过这次。 如果输入 exit,就结束循环。 否则打印输入内容。
代码如下:
whileTrue: text = input('请输入内容:')if text == '':continueif text == 'exit':break print(f'你输入的是:{text}')
这个例子特别好, 因为它把 continue 和 break 放在同一个程序里了。
逻辑非常清楚:
空输入,跳过 输入 exit,结束 其他正常输入,打印
这已经很像一个简单的真实交互程序了。
二十四、写在最后
循环真正难的地方,从来不只是“让它重复”。 更重要的是:
什么时候该停 什么时候该跳过 什么时候代码结构先搭着
而 break、continue、pass, 恰恰就是为了解决这三类问题。
所以你现在学的,不只是三个小关键词。 你是在学如何让循环变得更灵活、更接近真实程序逻辑。
只会写最基础的循环,程序还比较笨。 会用 break、continue、pass,循环才开始真正变得像工具。
这一步,非常值得你练熟。
本文小结
break 用来立刻结束整个循环。continue 用来跳过当前这一轮,直接进入下一轮。pass 表示什么都不做,常用来先占位置。break 和 continue 都常用于循环中,但作用完全不同。pass 不会结束循环,也不会跳过本轮,它只是让程序语法上完整。 学习这三个关键词最关键的,不是背定义,而是分清“整段结束”“本轮跳过”“先占位置”这三种完全不同的动作。
下篇预告
第 28 篇,我们继续推进循环能力。
循环嵌套:打印九九乘法表只是开始
到那一篇,你会看到:一个循环里面再套一个循环,程序的处理能力会一下子提升很多。