Skip to content

循环跳转

循环跳转

简介

在使用循环进行实现逻辑时,并不是每次都会将循环执行完毕,或者循环根本没有结束的条件。

此时,在循环过程中,期望达到某个条件时,结束循环继续向后执行,此时,就可以使用循环跳转来完成此功能。

Python中提供两种循环跳转语句:

  • break : 结束当前循环
  • continue : 结束本次循环

在讲解之前,先来了解一种特殊的循环方式。

死循环

死循环是指循环条件恒等为真,循环会一直执行下去,死循环并不是一种错误语法,反之,有效使用死循环可以解决很多问题。

但实际使用中,还是要尽量避免死循环的使用。

示例:

while True:
    print("Hogwarts!")

一般,在不确定循环次数的情况下,可以使用死循环来实现。比如 Web 服务器监听处理客户端的请求连接,服务器并不知道会有多少客户端会连接,此时就可以使用死循环实现。

示例: 从键盘持续输入数据,每输入一次,将数据添加到列表中保存

data = []
while True:
    d = input("请输入数据:")
    data.append(d)
    print(data)

从代码执行中可以发现,程序会一直等待用户输入并添加到列表中,不会结束执行。

此程序只为演示死循环的使用方式,并无实际意义。

break 语句

break 语句可以中止当前的 whilefor-in 循环,无论循环还有多少次没有执行,都会无条件结束循环后,跳转到循环后的语句继续执行。

以生活中的跑步为例,计划跑 5 圈,可是在跑到第 2 圈的时候,接到了室友的电话叫去吃大餐,于是果断停下来,中止跑步,这就相当于使用 break 语句提前中止了循环。

break 语句的语法比较简单,只需要在相应的 whilefor-in 语句中加入即可。

前面的示例使用用 break 可以优化为,当输入 bye 时,结束输入

data = []
while True:
    d = input("请输入数据:")
    if d == "bye":
        break
    data.append(d)
    print(data)

需要注意的是,break 语句出现在多层循环中时,所处在哪个循环的循环体内,就跳出哪个循环,更外层的循环不受影响。

示例:

for i in range(2):
    for j in range(5):
        print("Hello", j)
        if j == 2:
            break

当内层循环执行 3 次后满足 j==2 的条件,结束内层循环的执行,进入下一次外层循环。

continue 语句

continue 语句的作用用来中止本次循环而提前进入下一次循环中,循环体中未执行完的代码不在执行。

仍然以操场跑步为例,计划跑 5 圈,但是在跑完每圈的前一百米就回到起点重新跑,后面的不在跑了。

示例:

for i in range(10):
    print("*" * 10)
    print("i=",i)
    if i % 3 == 0:
        continue
    print("i*10= ", i*10)

大多数情况下,可以通过改变条件的方式,避免 continue 的使用。而代码更简洁。

for i in range(10):
    print("*" * 10)
    print("i=",i)
    if i % 3 != 0:
        print("i*10= ", i*10)

loop-else

在 Python 中,不只 if 语句可以使用 else , 循环语句也可以使用 else

当一个循环没有被 break 中断而正常循环结束,就会执行 else 后的代码块。

示例:

for i in range(5):
    print(i)
else:
    print("Over")

如果循环被中断,则不会执行 else 后的语句

示例:

for i in range(5):
    print(i)
    if i == 2:
        break
else:
    print("Over")

在某些场景下,else 可以简化代码。

示例:

names = ["tom","jack","rose","tony"]

inName = input("请输入要查找的姓名:")

# 不使用 else 形式
flag = False
for name in names:
    if name == inName:
        print("找到了")
        flag = True
        break
if not flag:
    print("没找到")

# 使用 else 形式
for name in names:
    if name == inName:
        print("找到了")
        break
else:
    print("没找到")