学Python4️⃣2️⃣ continue
作者:小号🎺
今天,我们分享关键字 continue 。
如同 break ,continue 也是必须和 for/while 循环体搭配使用。
和 break 一样,continue 也是针对循环的过程做一些临时的调整。
不同的是,continue 只是“跳出”本次循环,但不跳出循环体,然后从下一步循环继续。(所以叫 continue )
简单说,continue 就是“跳过(本轮循环中)余下的操作”的意思。跳过的英语单词是 skip 。但 skip 有可能意味着当前这一步循环被完全“跳过”,但实际上当前这一步循环的操作已经开始了,已经进行到一半了,需要临时调整一下。这样看,还是叫 continue 更准确。
日常操作中,经常用 continue 来实现如下的操作“目的”:
回避不好的数字
放 xx 一马,手下留情
已经做过则跳过,简称“去重”
比如:
例① for + continue

例② while + continue

类似的案例生活中还可以找到许多。比如
例③ 人们常说的“兔子不吃窝边草”
# 兔子不吃窝边草places = ["窝边", "洞口", "后院", "蕉下", "门外", "东边", "西边", "南边", "北边"]# 判断一个位置是不是兔子窝的邻居(窝边草)def is_neighbors_to(place, home="窝边"):# 定义哪些位置算邻居neighbor_places = ["窝边", "洞口", "后院", "蕉下", "门外"]return place in neighbor_placesprint("兔子觅食中……")for p in places:# 如果是邻居区域,跳过不吃if is_neighbors_to(p):print(f"{p} 太近了,不吃!continue 跳过")continueprint(f"在 {p} 开心吃草~")

这个“窝边草”的例子,也可以改成 while 版的。朋友们可以尝试一下。
例④ 受委托在朋友圈里发派对请柬,黑名单里的人不发。
# 所有熟人名单friends = ["张三", "李四", "王五", "赵六","钱七", "孙八", "周九", "吴十"]# 黑名单:这些人不邀请black_list = ["王五", "钱七"]# 电影票 / 请柬数量invites = 4sent = 0print("遍历朋友圈:")# 一个个看过去for person in friends:# 已满,不再发if sent >= invites:break# 如果在黑名单里,跳过,不发if person in black_list:continue# 不在黑名单 → 发print(f"给 {person} 发一份请柬")sent += 1

有趣的是,循环语句 for ... 、while ... 经常相互嵌套,循环语句里面 continue 和 break 也经常轮番出现,搭配使用。
例⑤ 学校里排课表时或许会经常使用 continue 、break 。
import randomcourses = ['数学', '语文', '英语', '体育', '美术']days = [1, 2, 3, 4, 5] # 周一 ~ 周五TT = [] # TT: timetablefor i in range(5):TT.append(['', '', ''])def have_course(course, day):if course in TT[day-1]:return Truedef get_tt_space_today(day):today_space = ''for i in range(3):if TT[day-1][i] == '':today_space += str(i)return today_spacedef get_tt_space_total():tt_space_total = 0for i in range(5):for j in range(3):if TT[i][j] == '':tt_space_total += 1return tt_space_totaltt_space = 15 # timetable_space 空白的课表位置while tt_space > 1:for day in days:course_index = random.choice('01234')course = courses[int(course_index)]if have_course(course, day):continueelse:tt_space_today = get_tt_space_today(day)# print(tt_space_today)if len(tt_space_today) > 0:choice = random.choice(tt_space_today)TT[day-1][int(choice)] = courseelse:breakttleft = get_tt_space_total()#print(ttleft)if ttleft < 1:break# 交换 行、列,按通常的习惯 打印 课程表for i in range(3):print(TT[0][i], TT[1][i], TT[2][i], TT[3][i], TT[4][i])
这份代码实现了一些最简单的排课表功能,大家可以看看如何进一步完善它。(代码中使用了一种“双重列表”来储存课表数据,可能比较生疏,要注意一下。实操截图附后。)
今天就分享到这里。欢迎大家到评论区交流。
作业:
① while 版 兔子不吃窝边草

附录:
① 作业:while 版 兔子不吃窝边草
import randomplaces = ["窝边", "洞口", "后院", "蕉下", "门外", "东边", "西边", "南边", "北边"]def is_neighbors_to(place):return place in ["窝边", "洞口", "后院", "蕉下", "门外"]# 一直选,直到选到不是窝边的while True:pick = random.choice(places)# 如果是邻居,跳过,重新选if is_neighbors_to(pick):continueprint(f"兔子现在在:{pick} 吃草")break




