python中的循环控制语句break与continue

学习这两个语句之前,我们要先了解这两个语句是什么意思:

break:中断、打破的意思。所以它的跳出循环的意思

continue:继续的意思,意思是跳过当前条件,继续循环

新需求来了!我们不仅要告诉 Python 循环在何时执行,还要在某个时刻强制终止循环。一切的一切,都需要我们对循环进行更精细的控制。下面我来带你认识两种常用的 循环控制语句,从 break 语句开始吧。

break 语句

break 这个单词有“中断、打破”的意思。用于循环语句时,break 语句常和条件判断一起使用,在满足某个条件时终止整个循环。没错,break 就是这么威武霸气。

在 while 循环和 for 循环里,break 的用法分别是:

现在,蟹老板要求在循环语句中考虑食材余量的问题。我们可以设一个变量 left 表示食材余量,1 份食材可以做 1 个蟹黄堡,每招待一位客人, left 的值就要减 1。

提示:left 这个单词在英语中有“剩余”的含义,是时候来一波扇贝单词联动了ヾ(=・ω・=)o。

那我们要怎么通知 for 循环停下来呢?这就轮到 break 上场了。当仓库没有食材,也就是 left == 0 值为 True 时,触发 break 语句强制终止循环,写成代码就是:

# 店里现在还剩 3 份食材
left = 3

for i in range(1, 6):
  print('为第' + str(i) + '位客人做一份蟹黄堡')
  # 做完汉堡后,食材余量减 1
  left -= 1
  # 如果食材没有剩余,就跳出循环
  if left == 0:
    break

print('食材没有了,明天再来吧')

# 输出:
# 为第1位客人做一份蟹黄堡
# 为第2位客人做一份蟹黄堡
# 为第3位客人做一份蟹黄堡
# 食材没有了,明天再来吧

每做出一份蟹黄堡,食材余量 left 的值就减 1,直到满足 if 语句中 left == 0 的判断条件,就通过 break 终止整个循环,到店的前 3 位客人能吃到美味蟹黄堡,后面来的就只能闻闻味儿,明天再来了。

while 循环中也能应用 break 语句跳出整个循环。除此之外,还有一种特殊的用法:使用 break 语句在特定条件下跳出“死循环”(当然啦,因为能用 break 跳出,这里不算严格意义上的死循环)。

之前说过,我们不会傻傻地把 while 循环的循环条件写成 True,除非有意而为之。举个例子🌰,食材还剩 3 份,海绵宝宝要一直做蟹黄堡,直至食材用完就停止循环,代码可以写成:

left = 3

while True:
  # 如果食材没有剩余,就停止做蟹黄堡
  if left == 0:
    break
  print('做一份蟹黄堡')
  # 做一份蟹黄堡,食材数减 1
  left -= 1

print('食材没有了,不做了')

# 输出:
# 做一份蟹黄堡
# 做一份蟹黄堡
# 做一份蟹黄堡
# 食材没有了,不做了

上面的代码中循环条件一直为 True 也不会造成真的“死循环”,因为在 left 等于 0 时,循环会被 break 语句强制终止。这相当于将循环条件放到了循环体中,和下面这段代码的功能是一样的:

left = 3

# 如果食材有剩余,就一直做蟹黄堡
while left > 0:
  print('做一份蟹黄堡')
  left -= 1

break编程练习

整天乐陶陶的海绵宝宝,却有一个苦大仇深的邻居章鱼哥。海绵宝宝和派大星正在玩叫车的游戏,两个人站在路边大喊大叫,把章鱼哥吵得十分烦躁。为了照顾章鱼哥的感受,海绵宝宝和派大星决定,只要章鱼哥出现,就停下游戏以免吵到他。

请你使用 while 循环和 break 语句完善代码,要求:

  1. 在玩叫车游戏之前,先检查章鱼哥在不在,如果在,就打印 章鱼哥来了,不玩了,并结束循环;
  2. 如果章鱼哥不在,就一直玩叫车游戏,直到章鱼哥来了再停下来。

注意:别忘了添加正确的缩进哦!

i = 1
while ???
answer = input('章鱼哥在吗?回答在/不在')
# 如果章鱼哥不在,就重复打印👇
print('玩第' + str(i) + '次叫车游戏')
# 如果章鱼哥在,就终止循环并打印👇
print('章鱼哥来了,不玩了')

i = 1
while True:
  answer = input('章鱼哥在吗?回答在/不在')
  if answer != '在':
      # 如果章鱼哥不在,就重复打印👇
    print('玩第' + str(i) + '次叫车游戏')
    i += 1
  else:
    # 如果章鱼哥在,就终止循环并打印👇
    print('章鱼哥来了,不玩了')
    break

但如果使用 break 语句的话,只要痞老板一来,整个循环都会终止,排在后面的客人就没办法拿到蟹黄堡了。有没有什么办法能只跳出这一次循环,而不影响后面的流程呢?

continue 语句就能解决他的烦恼!让我们继续课程,看看它与 break 的异同吧。

continue 语句

continue 这个单词我们都很熟悉了,它的意思是“继续”,指动作或状态的继续或持续不中断。单看这个单词,你就能理解,执行 continue 语句后,循环依然会继续,而不会像 break 一样让整个循环都停下来。

continue 语句也经常和 if 语句搭配使用,用于在特定条件下 跳过当前循环体中的剩余语句,继续进行下一轮循环。执行 continue 语句后,程序会跳回循环开始处,至于本次循环中的剩余代码,就一概不管了。

与 break 语句一样,continue 语句同样要和条件判断结合起来用:

  • 在 while 循环中,continue 意味着 继续检查条件
  • 在 for 循环中,continue 则意味着 继续遍历序列中的下一个元素

我们回到具体案例里演练一下。海绵宝宝正在使用循环魔法给客人们做蟹黄堡,如果发现客人是痞老板,就把他请出去,继续招待下一位客人。假设排队客人的姓名列表是 names,使用 continue 语句的代码要这样写:

# 建立一个列表,储存客人的名字
names = ['泡芙老师', '珊迪', '痞老板', '章鱼哥']

for name in names:
  if name == '痞老板':
    print('海绵宝宝拒绝给痞老板做蟹黄堡')
    continue
  print('给' + name + '做一份蟹黄堡')

在遍历到 '痞老板' 时,循环跳过条件满足,通过条件分支触发了 continue 语句。至于跟在 continue 后面的第 8 行代码 print('给' + name + '做一份蟹黄堡') 就被跳过啦。最终代码输出结果如下:

为泡芙老师做一份蟹黄堡
为珊迪做一份蟹黄堡
海绵宝宝拒绝给痞老板做蟹黄堡
为章鱼哥做一份蟹黄堡

编程练习——叫车游戏一

学了 continue 语句后,海绵宝宝和派大星有了新的打算,如果章鱼哥在,暂时先停一下,等他走了就继续开始下一轮游戏,而不是像上一道题那样,遇到章鱼哥就结束玩耍。

请你使用 while 循环和 continue 语句完善代码,要求:

  1. 海绵宝宝想再玩 3 次叫车游戏,如果满足循环条件,就玩检查章鱼哥在不在,如果在,就打印 章鱼哥来了,等他走了再玩,并跳过本次循环;
  2. 如果章鱼哥不在,就玩叫车游戏,并继续循环,直至玩够 3 次就终止循环;
  3. 玩够 3 轮游戏后,海绵宝宝和派大星就要回家了,打印 派大星,明天见!

拓展:为什么这道题要用 while 循环来写代码呢?用 for 循环完成代码会出现什么问题?感兴趣的同学可以自己写代码试一下!再次提示:while 循环更适合解决循环次数不确定的问题。

answer = input('章鱼哥在吗?回答在/不在')
print('章鱼哥来了,等他走了再玩')
print('玩第' + str(i) + '次叫车游戏')
print('派大星,明天见!')

完成后代码为:

i = 0
while i in range(3):
  answer = input('章鱼哥在吗?回答在/不在')
  if answer == '在':
    print('章鱼哥来了,等他走了再玩')
    continue

  print('玩第' + str(i + 1) + '次叫车游戏')
  i += 1
print('派大星,明天见!')

编程练习——叫车游戏二

学了 continue 语句后,海绵宝宝和派大星有了新的打算,如果章鱼哥在,暂时先停一下,等他走了就继续开始下一轮游戏,而不是像上一道题那样,遇到章鱼哥就结束玩耍。

请你使用 while 循环和 continue 语句完善代码,要求:

  1. 海绵宝宝想再玩 3 次叫车游戏,如果满足循环条件,就玩检查章鱼哥在不在,如果在,就打印 章鱼哥来了,等他走了再玩,并跳过本次循环;
  2. 如果章鱼哥不在,就玩叫车游戏,并继续循环,直至玩够 3 次就终止循环;
  3. 玩够 3 轮游戏后,海绵宝宝和派大星就要回家了,打印 派大星,明天见!

拓展:为什么这道题要用 while 循环来写代码呢?用 for 循环完成代码会出现什么问题?感兴趣的同学可以自己写代码试一下!再次提示:while 循环更适合解决循环次数不确定的问题。

answer = input('章鱼哥在吗?回答在/不在')
print('章鱼哥来了,等他走了再玩')
print('玩第' + str(i) + '次叫车游戏')
print('派大星,明天见!')

代码优化后:

answer = input('章鱼哥在吗?回答在/不在')
i = 0
while i in range(3):
  if answer == '在':
    print('章鱼哥来了,等他走了再玩')
    answer = input('章鱼哥在吗?回答在/不在')
    continue
  else:
    i += 1
    print('玩第' + str(i) + '次叫车游戏')
print('派大星,明天见!')

进阶:列表生成式

在结束本关课程前,老师要为你拓展一个与 for 循环有关的编程“小甜点”:列表生成式。这是 Python 中用来快速生成想要的列表的一种简便方式。

举个例子,我们想将 1 到 10 的平方都存到一个列表中,得到 [1, 4, 9, 16, 25, 36, 49, 64, 81, 100],利用之前的知识可能要这样写:

y = []
for x in range(1, 11):
  y.append(x * x)

换成列表生成式,一行代码就能得到想要的列表:

y = [x * x for x in range(1, 11)]
print(y)
# 输出:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

把要生成的元素 x * x(这个表达式可以自定义)放到前面,后面加一个 for 循环,Python 就会自动根据遍历到的元素 x 计算出 x * x 的值,一个个存到列表里。

我们甚至还可以在 for 循环后面加上条件判断:

# 筛选出奇数的平方
y = [x * x for x in range(1, 11) if x % 2 == 1]
print(y)
# 输出:[1, 9, 25, 49, 81]

上面的代码如果不用列表生成式,可以写成下面这样,它俩效果一样:

y = []
for x in range(1, 11):
  if x % 2 == 1:
    y.append(x * x)
print(y)
# 输出:[1, 9, 25, 49, 81]

总结一下,列表生成式的语法规则如图,你学会了吗?

编程练习

繁忙的一天结束,蟹堡王打烊啦。蟹老板想把单笔大于 70 元的大额订单都筛选出来,你来运用列表生成式的知识帮帮小贝吧。

要求:将列表 orders 中大于 70 的元素筛选出来,保存到列表 large_orders 中。

orders = [91, 4, 20, 67, 24, 13, 84, 40, 77, 47]

解答后:

orders = [91, 4, 20, 67, 24, 13, 84, 40, 77, 47]
large_orders = [order for order in orders if order > 70 ]
print(large_orders)

# 输出结果为:[91, 84, 77]

练习题:

海绵宝宝把蟹黄堡的秘方存在一个小小的保险箱里。有天他想检查一下秘方是否安全无虞,却悲催地发现自己忘记密码了 乂(゚Д゚三゚Д゚)乂 ……绝望的海绵宝宝决定求助 Python 之神。

其实,密码破解的问题对 Python 来说很好解决,最简单的方式就是穷举法,用更通俗易懂的方法来讲,也就是 列举所有可能,一个个去试。人工手动去试密码能让人疯掉,而这种事对计算机来说可是小菜一碟。

假设一个四位密码保存在变量 password 里,而我们不知道密码是什么,那就可以让计算机遍历所有 4 位的纯数字,从 1000 遍历到 9999,如果这里面有任何一个数字的值与 password 相等,就把它打印出来,这就是我们要的密码啦。

下面把时间交给你,用上面讲到的思路,帮海绵宝宝写一个密码破解器吧!剧透一下,这道题的代码有好几种写法,你能想到几种呢?

拓展:密码可以通过一次次的尝试暴力破解,现在你知道为什么网站要限制密码输入次数了吧?现实中密码破解的情况会更复杂,我们也要寻求更高效的方法。

# 这两行代码用于生成一个 4 位数的随机密码,请不要更改!
from random import randint
password = randint(1000, 9999)

# 用循环找出 password 中存储的值
# 方法一
i = 1000
while i in range(10000):
  if i == password:
    print(i)
    break
  i += 1

# 方法二
for i in range(10000):
  if i == password:
    print(i)
    break

# 方法三
key = [i for i in range(10000) if i == password]
print(key[0])

FizzBuzz游戏

FizzBuzz 是一个经典的聚会游戏:从 1 开始数,到 3 的倍数就替换成“Fizz”,到 5 的倍数就替换成“Buzz”,既能被 3 整除、又能被 5 整除的数则替换成“FizzBuzz”。举

个例子,从 1 数到 15,按 FizzBuzz 替换完成的就是 1,2,Fizz,4,Buzz,Fizz,7,8,Fizz……13,14,FizzBuzz。

现在请你编写一个程序,将从 1 到 100 的数字按 FizzBuzz 的规则来替换,并逐个打印到屏幕上,输出效果如下:

1
2
Fizz
4
Buzz
...
98
Fizz
Buzz

for i in range(1,101):
  if i % 3 == 0 and i % 5 == 0:
    print('FizzBuzz')
  elif i % 3 == 0:
    print('Fizz')
  elif i % 5 ==0:
    print('Buzz')
  else:
    print(i)

全部花光

中秋节放假了!公司给小贝和闻闻发了共计 500 元的购物卡,可以到大卖场购买 3 种不同的产品:

  • 电动牙刷:85 元
  • 漱口水:55 元
  • 水杯:40 元

小贝和闻闻商量了一下,她俩想把这 500 元的购物卡正好全部花光,有哪些购买组合呢?

手算非常烧脑,交给 Python 却是分分钟搞定。请完成代码,打印出能把 500 元全部花光的购买组合,代码输出格式如:电动牙刷-0,漱口水-4,水杯-7

提示:拿到题目毫无头绪?提示一下,可以结合 for 循环和 range() 函数来列举所有可能的情况,再从中挑选能将 500 元恰好花光的购买组合哦。

# 购买牙刷最大数
toothbrush = int(500/85)
# 购买漱口水最大数
mouthwash = int(500/55)
# 购买水杯最大数
water = int(500/40)
for i in range(toothbrush + 1):
  for j in range(mouthwash + 1):
    for k in range(water + 1):
      if i * 85 + j * 55 + k * 40 == 500:
        print('电动牙刷-' + str(i) + ',漱口水-' + str(j) + ',水杯-' + str(k))

计算阶乘

阶乘指的是一个整数与所有比它小的正整数的乘积,比如 2!= 2 x 1,3!= 3 x 2 x 1。

请补全下面的代码,计算 1 + 2! + 3! + … + 20! 的和,并将这个结果打印出来。

result = 1
n = 1
while n in range(20):
  n += 1
  sum = 1
  for i in range(2,n + 1):
    sum = sum * i
  result = result + sum
print(result)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/677856.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

运营干货:用户运营体系

1、用户生命周期 2、用户引入阶段 3、用户留存阶段 4、用户回流阶段

Camunda BPM架构

Camunda BPM既可以单独作为流程引擎服务存在,也能嵌入到其他java应用中。Camunda BPM的核心流程引擎是一个轻量级的模块,可以被Spring管理或者加入到自定义的编程模型中,并且支持线程模型。 1,流程引擎架构 流程引擎由多个组件构成,如下所示: API服务 API服务,允许ja…

创意KMS知识图谱ui设计合集来了

创意KMS知识图谱ui设计合集来了

Redis的一致性

一、产生的原因 使用缓存,在进行写操作的时候就会出现不一致的问题。 一致性分为三类:强一致性,弱一致性,最终一致性 二、方案 2.1 延时双删 在更新数据库的操作前后分别进行一次删除缓存的操作,并在更新数据库之后…

广工电工与电子技术实验报告-按键键值识别和LED数码管显示

实验代码 Key_LED.v module Key_LED (key, HEX0); input[3:0] key; output[6:0] HEX0; reg[3:0] A; always (key) begin if (key[0] < 0) begin A 4b0001; end else if (key[1] < 0) begin A 4b0010; end else if (key[2] < 0) begin A 4b0011; end else if (key[…

Java——分支语句

控制结构是管理代码执行流程的基础。主要包括顺序控制、分支控制和循环控制。 一、顺序控制 顺序控制是最基本的控制结构&#xff0c;程序按照代码的书写顺序逐行执行。 public class SequentialControl {public static void main(String[] args) {int a 5;int b 10;int s…

jupyter notebook使用conda环境

pycharm中安装过可以使用的库在jupyter notebook中导入不进来 1 检查pycharm中安装的库的位置 2 检查jupyter notebook中安装的库的位置 3 查看jupyter notebook内核名字 可以看到jupyter notebook中内核名字叫ipykernel 4 安装ipykernel 在pycharm的terminal中 pip instal…

微服务:Rabbitmq利用jackson序列化消息为Json发送并接收

消息序列化 Spring默认会把你发送的消息通过JDK序列化为字节发送给MQ&#xff0c;接收消息的时候&#xff0c;再把字节反序列化为Java对象。 我们可以配置JSON方式来序列化&#xff0c;这样体积更小&#xff0c;可读性更高。 引入依赖&#xff1a; <dependency><g…

CV每日论文---2024.6.3

1、Video-MME: The First-Ever Comprehensive Evaluation Benchmark of Multi-modal LLMs in Video Analysis 中文标题&#xff1a;Video-MME&#xff1a;视频分析领域首个多模态法学硕士综合评估基准 简介&#xff1a;Video-MME 是一个全面评估多模态大语言模型&#xff08;M…

18、Go Gin框架中的binding验证器使用

一、binding功能介绍 Gin的binding包提供了一组功能&#xff0c;用于将请求的数据自动绑定到结构体&#xff0c;并根据结构体标签进行数据验证。常用的标签有binding和validate&#xff0c;通过这些标签可以指定数据的类型和验证规则。 常见标签 binding:"required"…

今日好料推荐(运维服务管理流程+互联网运维)

今日好料推荐&#xff08;运维服务管理流程互联网运维&#xff09; 本文内容是运维服务管理的梳理 参考资料内容&#xff1a;运维服务管理流程设计&互联网运维理论与实践 参考资料在文末获取&#xff0c;关注我&#xff0c;分享优质前沿资料&#xff08;IT、运维、编码、…

斜拉桥智慧施工数字孪生

基于图扑自主研发的 HT for Web 产品&#xff0c;利用现场照片及 CAD 图纸&#xff0c;结合 PBR 材质&#xff0c;搭建了具有赛博朋克风格的智慧斜拉桥可视化解决方案&#xff0c;精准复现斜拉桥建造规划过程&#xff0c;辅助运维人员对桥梁基建过程的网格化管理。提高桥梁的建…

【Spring Cloud Alibaba】Nacos统一配置管理

目录 回顾问题 统一配置管理配置中心的解决方案&#xff1a;Nacos的关键特性动态配置服务小结 Nacos的架构 Spring Cloud Alibaba Nacos Config1.创建项目2.添加依赖3.添加启动注解4.添加配置信息5.使用控制器类动态读取配置信息6.Nacos Server添加配置信息7.测试 Nacos Namesp…

大疆、西圣、枫笛领夹麦哪个好?大疆、西圣领夹麦克风测评对比

不知道大家有没有想过一个问题&#xff0c;为什么有些视频或直播的声音听起来那么清晰&#xff0c;仿佛身临其境&#xff1f;其实最主要的就是麦克风的原因&#xff0c;我们以前用的麦克风或多或少都会存在一些小毛病例如&#xff1a;音质不清晰、传输不稳定容易断断续续、声音…

国内PLM系统厂商,国内PLM系统哪个公司最受欢迎

国内PLM系统厂商,国内PLM系统哪个公司最受欢迎 国内PLM系统厂商中&#xff0c;要确定哪个公司的产品最受欢迎&#xff0c;需要考虑多个因素&#xff0c;包括市场份额、客户评价、技术实力、产品线完整性以及服务支持等。虽然无法直接给出一个具体的“最受欢迎”的排名&#xff…

centos7安装kubernetes v1.28.2

centos7安装kubernetes v1.28.2 一&#xff0e;环境部署 1.1基础环境配置 主机IP 主机名规划 172.17.48.15 master 172.17.48.3 node1 1.2修改机器名称 #永久修改主机名 hostnamectl set-hostname master && bash #在master上操作 hostnamectl set-hostname …

分层存储的图片的3d显示

分层存储的图片叠层成为3d&#xff0c;并显示。 文件夹D:\mask内的分层存储的图像文件&#xff1a; 1、显示为3d点云&#xff1a; import open3d as o3d import numpy as np from PIL import Imagedef convert_images_to_point_cloud(image_paths):points []for i, image_pa…

windows中安装zookeeper

https://zhuanlan.zhihu.com/p/692451839 【zookeeper】在Windows上启动zookeeper_windows启动zk-CSDN博客 Index of /apache/zookeeper/zookeeper-3.9.2 Index of /apache/zookeeper/zookeeper-3.9.2 Zookeeper的应用场景 1、配置管理 2、服务注册中心 3、主从协调 4、…

【OpenHarmony】ArkTS 语法基础 ③ ( @Component 自定义组件生命周期回调函数 | @Entry 页面生命周期回调函数 )

文章目录 一、ArkTS Component 自定义组件生命周期1、自定义组件生命周期2、aboutToAppear 函数执行时机和作用3、aboutToDisappear 函数执行时机和作用4、代码示例 二、ArkTS Entry 页面生命周期1、Entry 页面生命周期2、onBackPress 和 onPageHide 回调函数无关联 三、代码示…

【NoSQL数据库】Redis简介

Redis Redis简介 Redis关系型数据库和非关系型数据库Redis 简介redis速度快的原因 Redis 配置Linux 源码安装 关系型数据库和非关系型数据库 关系型数据库&#xff08;Relational Database&#xff09;和非关系型数据库&#xff08;Non-Relational Database&#xff09;是两种…