python中的while循环

没有循环时,想打印0-100之间的数字,则需要循环多次,例:

print(0)
print(1)
print(2)
print(3)
...
print(99)

但是使用循环的话,就不会有那么麻烦

while 循环

while 这个单词有“在……时”的含义,while 循环自然也可以被理解为“在……时进行循环”。确实是这样,在 while 循环中,计算机在 满足条件 时 重复执行 某段代码,直至条件不满足再终止循环。

while 循环的执行流程与 if 语句有相似之处,语法规则与 if 语句也是很像的。下图是一个典型的 while 循环,运行后会逐行输出 0、1、2.....100:

i = 0
while i < 100:
  print(i)
  i = i + 1

这里拓展一个小知识点,i = i + 1 可以简写成 i += 1。所以上面的代码等价于:

i = 0
while i < 3:
  print(i)
  i += 1

编程练习

等待蟹黄堡的客人一共有 5 位,海绵宝宝要为每一位客人都做一份美味蟹黄堡。你能用循环修改下面的代码,帮助海绵宝宝简化自己的工作流程吗?

i = 1
# 定义变量 i,用来表示客人的序号,初始值为 1

print('为第' + str(i) + '位客人做一份蟹黄堡')
# 给当前客人做一份蟹黄堡
i += 1
# i 值加 1,招待下一位客人

print('为第' + str(i) + '位客人做一份蟹黄堡')
i += 1
  
print('为第' + str(i) + '位客人做一份蟹黄堡')
i += 1
  
print('为第' + str(i) + '位客人做一份蟹黄堡')
i += 1
  
print('为第' + str(i) + '位客人做一份蟹黄堡')
i += 1

简化后结果为:

i = 1
# 定义变量 i,用来表示客人的序号,初始值为 1
while i < 6:
  print('为第' + str(i) + '位客人做一份蟹黄堡')
  i += 1

死循环

我们先来看看出错的代码吧,对比一下之前能正确做出 5 个蟹黄堡的代码,你发现了什么问题?

# 正确的代码:
i = 1
while i <= 5:
  print('为第' + str(i) + '位客人做一份蟹黄堡')
  i += 1

# 派大星的代码:
i = 1
while i <= 365:
  print('给派大星做一个蟹黄堡')

没错,派大星写的循环体里少了一句 i += 1,这就说明,在代码运行过程中,i 值始终没有被改变,一直都能满足 i <= 365 的条件。循环条件永远为真,那 print('给派大星做一个蟹黄堡') 这句指令自然也会一直执行啦。

所以,蟹黄堡就会永无止境地生成,换句话说,这个循环,停不下来 了。在编程中,这种无法靠自身控制终止的程序称为 死循环

问题的答案很简单:确保循环条件不会永远成立,也就是说,我们要保证 while 后面跟的 循环条件 最终可以被转化为 False

我们让计算机在打印句子之后,还要对 i 值加 1,这样就能保证 i 值一直在增加,直至 i = 6,不再满足 i <= 5 的条件,程序就会跳出循环:

i = 1
while i <= 5:
  print('为第' + str(i) + '位客人做一份蟹黄堡')
  i += 1

⚠️循环中,切不可缺少‘i’这个属性值,防止遇到死循环

编程练习一

海绵宝宝有一只心爱的宠物蜗牛,名叫小蜗。海绵宝宝出门去蟹堡王上班了,小蜗就写了一段代码,判断几个小时后海绵宝宝才能回家。

但这个代码的运行结果却是……海绵宝宝永远都不会回家了!小蜗以为自己被海绵宝宝抛弃了,非常伤心。你能帮它修改这段代码,让它看到正确的答案吗?

time_left = 10
# 海绵宝宝每天需要工作 10 个小时
while time_left > 0:
  print('距离海绵宝宝回家还有' + str(time_left) + '个小时')

print('海绵宝宝回家了!')

# 预期逐行输出:
# 距离海绵宝宝回家还有10个小时
# 距离海绵宝宝回家还有9个小时
# ...
# 距离海绵宝宝回家还有1个小时
# 海绵宝宝回家了!

# 实际输出:
# 距离海绵宝宝回家还有10个小时
# 距离海绵宝宝回家还有10个小时
# 距离海绵宝宝回家还有10个小时
# ...(死循环中)

解答为:

time_left = 10
# 海绵宝宝每天需要工作 10 个小时
while time_left > 0:
  print('距离海绵宝宝回家还有' + str(time_left) + '个小时')
  time_left -= 1
print('海绵宝宝回家了!')

看到正确的输出,小蜗终于开心起来了,谢谢你安慰了它!

编程练习二

我们给代码加了一句 i += 1,拯救了死循环。这里我们拓展一下思维,想想看,一个循环中不包含形如 i += 1 的代码,那它是否一定会进入死循环呢?

下面这段代码会是死循环吗?告诉我你的判断吧~

number = 0

while number != 345:
  number = int(input('猜猜我想到的数字?'))

这段代码不会进入死循环哦!不劳烦 i += 1 出场,input() 函数也可以不断地给 number 重新赋值。如果输入的是“345”,那 number != 345 这个循环条件就不成立啦,循环当然会自动终止。

再次重申一下,避免死循环需要我们保证 循环条件是否可以转变为 False,形如 i += 1 的代码并不是必要条件,认真控制循环条件才是避免出错的不二法门!

关于 while 循环的方方面面就说到这里,现在你又成功掌握一种新的语句了,怎么样,循环是不是很有趣?

编程练习三

掌握了 while 循环的知识,我们结合之前列表的相关知识来做一个彩票抽奖机!

中奖号码由 6 个 0-99 之间的随机数(包括 0 和 99)构成。中奖的朋友,可以获得蟹堡王年卡,每天都能吃到免费的美味蟹黄堡!

老师为你定义好了一个 get_num() 函数,功能是返回 1 个 0~99 之间的随机整数。用法如下所示:

# 假设生成的随机整数是 55

# 打印出返回值为 55
print(get_num())
# 输出:55

# 将这个随机整数保存到变量里
num = get_num()

请你写一个 while 循环,重复 6 次 调用 get_num() 函数的操作,并把每次获得的随机数保存到列表 lottery 里。

提示:还记得给列表尾部追加元素要使用 append() 方法吗?

# 有了下面这行代码,get_num() 函数才有效
# 千万不要手滑删除啦!
from random import randint

# 不需要修改函数,按照提示调用即可
def get_num():
  # randint(0, 99) 随机生成 0-99 之间的数,包括 0 和 99
  return randint(0, 99)

lottery = []

# 请你补全代码
# 用循环获得 6 个随机数存到 lottery 里作为中奖号码
i = 0
while i <= 6:
  num = get_num()
  lottery.append(num)
  i += 1

# 打印出最终的 lottery 列表
print('本期彩票中奖号码为:' )
print(lottery)

学习巩固

1/3对折对折再对折

一张纸的厚度大约是 0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13 米)?

请用 循环 完成这个练习,并打印出 需要对折n次,n 是纸的厚度大于等于 8848.13 米时已经对折的次数。

# 珠穆朗玛峰高8848.13米  88481.3厘米  884813毫米(mm)
mount = 8848130
# 纸张 0.08mm
paper = 0.08
# 请补全代码
i= 0.08
int = 0
while i < mount:
  # print(i)
  i = i * 2
  int += 1
print('需要对折' + str(int) + '次')


# 答案为27次

2/3黄帮主逃课了吗

我们可以用 while 循环来依次访问列表中的元素,循环终止条件可以设置为 i < len(列表名称)

其中,i 值对应的是列表的索引,len(列表名称) 获取的是列表长度,每访问一个元素,我们就让索引值 i 加 1,直到索引值与列表长度相同,就终止循环。

name_list = ['红小贝','黄小贝','紫小贝']

i = 0
while i < len(name_list):
  print(name_list[i])
  i += 1
# 逐行输出:红小贝 黄小贝 紫小贝

我们用这个方法来完成一个有趣的练习吧。今天上课时,班主任发现班上少了一名同学,她猜最淘气的黄帮主可能没来上学。

到校的学生姓名已经按照到校时间记录在考勤表 name_list 中了,请你用上面的方法完善 checking() 函数,帮助班主任判断一下黄帮主有没有逃课。如果逃课了就打印出 黄帮主逃课了,如果没有,就打印出 黄帮主是第n个到校的,n 是他到校的顺序。

name_list = ['红小贝','黄小贝','蓝小贝','绿小贝','青小贝','紫小贝','黄帮主']

def checking(name):
  global name_list
  i = 0
  while i < len(name_list):
    if name == name_list[i]:
      print(name + '是第' + str(i + 1) + '个到校的')
      return
    i += 1
  print(name + '逃课了')
checking('黄帮主')

3/3头疼的数学课

黄帮主终于在铃声前到达了学校,但第一节课就是让他头疼的数学课。

今天的课堂作业是计算 1 到 100 各个数的和,黄帮主想偷懒,于是拿出了 Python 编辑器。

请你帮黄帮主完善函数 counting(),用 while 循环打印出从 1 加到 100 的和。

def counting(n):
  # 请补全代码
  i = 0
  sum = 0
  while i <= 100:
    sum += i
    i += 1
  print(sum)
counting(100)

下篇预告:python中的for 循环

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

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

相关文章

patchworklib,一款极其强大的 Python 库!

一、问题 如果想把多个图合并放在一个图里&#xff0c;如图&#xff0c;该如何实现 好在R语言 和 Python 都有对应的解决方案&#xff0c; 分别是patchwork包和patchworklib库。 二、R语言 安装 两个图并排在一行&#xff0c;只需要导入patchwork&#xff0c; 然后相加即可 …

算法课程笔记——计数原理

算法课程笔记——计数原理

2024年信息素养大赛图形化编程小低组复赛模拟真题

2024年全国青少年信息素养大赛复赛为六道编程题&#xff0c;分值为10分*215分*225分*2&#xff0c;难度依次递增&#xff0c;按步骤评分&#xff0c;据Scratch实验室预估&#xff0c;初赛80%的晋级率&#xff0c;初赛近20万人&#xff0c;意味着有15万多进入复赛&#xff0c;7月…

最前端|手把手教你打造前端规范工程

前端代码风格因人而异&#xff0c;一个项目参与的人多了&#xff0c;不加强控制可能就是一个大杂烩&#xff0c;对开发人员来讲就是一个噩梦。 如何解决这种困境&#xff1f; 通过使用 ESLint Prettier Husky Lint-stagedCommitlint Commitizen 这套方案&#xff0c;它能够在…

Camx架构-Camera kernel Driver debugging

目录 V4L2 framework camera drivers CRM 功能性 CRM log analysis 使能CRM log: camera启动期间列举子设备: userspace 连接或者取消已获得的device handles(UMD 等效于CSLLink/CSLUnlink) userspace open request (UMD等效于CSLOpenRequest) 在SOF期间,reque…

Linux防火墙入门——iptables、firewalld配置详解

合理的防火墙是你的计算机防止网络入侵的第一道屏障。你在家里上网&#xff0c;通常互联网服务提供会在路由中搭建一层防火墙。当你离开家时&#xff0c;那么你计算机上的那层防火墙就是仅有的一层&#xff0c;所以配置和控制好你 Linux 电脑上的防火墙很重要。 很多 Linux 发…

[Windows] 植物大战僵尸杂交版

游戏包含冒险模式、挑战模式、生存模式三种不同玩法。冒险模式主打关卡闯关&#xff0c;挑战模式则挑战特殊设计的关卡&#xff0c;生存模式结合无尽模式和特殊地图&#xff0c;各具特色。玩家可根据喜好自由选择模式&#xff0c;体验不同的游戏乐趣。快来尝试这款独特的pvz游戏…

Kompas AI:智能生活的开启者

引言 在现代社会&#xff0c;**人工智能&#xff08;AI&#xff09;**已经深刻地影响了我们的生活和工作。无论是智能家居、自动驾驶&#xff0c;还是医疗诊断&#xff0c;AI的应用无处不在。而在众多AI平台中&#xff0c;Kompas AI 作为一个先进的对话式AI平台&#xff0c;通过…

aigc绘画设计——画图五年,不如AI跑5秒? 一键Ai模仿网红同款效果图教程!

这是AI给我的图 同样的风格有木有&#xff01; 画图十余载&#xff0c;归来仍是小白..... 面对现在层出不穷的网红效果图风格 十年画图工看了都得懵逼 每次尝试去模仿总是眼睛会了&#xff0c;手没会 谁能救救我&#xff01; 终于终于等到了AI绘图&#xff0c;但还是需要自己…

风景的短视频一分钟:成都科成博通文化传媒公司

风景的短视频一分钟&#xff1a;时光凝固的画卷 在快节奏的现代生活中&#xff0c;我们常常被繁忙和琐碎所困扰&#xff0c;渴望在喧嚣中找到一丝宁静与美好。而风景的短视频&#xff0c;正是这样一份能够让我们在短时间内沉浸于自然之美的奇妙礼物。成都科成博通文化传媒公司…

使用缓存时,先操作数据库 or 先操作缓存

使用缓存时&#xff0c;先操作数据库 or 先操作缓存&#xff1f;谈谈你的见解。 如何上面是一道面试题&#xff0c;你要如何回答&#xff0c;一个去团团面试的同学回来告诉我&#xff0c;一个问题带出一串问题&#xff0c;回答不好&#xff0c;直接作废&#xff0c;换句话说&am…

某红书旋转滑块验证码分析与协议算法实现(高通过率)

文章目录 1. 写在前面2. 接口分析3. 验证轨迹4. 算法还原 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致…

C2M商业模式分析与运营平台建设解决方案(52页PPT)

方案介绍&#xff1a; C2M商业模式通过直接连接消费者与制造商&#xff0c;实现了个性化定制和高效生产。运营平台建设解决方案则注重技术选型、数据驱动、用户体验和供应链管理等方面&#xff0c;为C2M模式的顺利实施提供了有力支持。随着数字化时代的到来&#xff0c;C2M模式…

解决git status提示error bad signature 0x00000000

问题描述&#xff1a; 操作git的时候电脑卡了&#xff0c;重启电脑后git status就提示bad signature 0x00000000&#xff0c;index file corrupt错误&#xff0c;如下&#xff1a; 解决办法&#xff1a; rm -f .git/index git reset

计网期末复习指南(三):数据链路层(CRC冗余校验码计算、PPP协议、CSMA/CD协议、交换机的自学习能力、VLAN)

前言&#xff1a;本系列文章旨在通过TCP/IP协议簇自下而上的梳理大致的知识点&#xff0c;从计算机网络体系结构出发到应用层&#xff0c;每一个协议层通过一篇文章进行总结&#xff0c;本系列正在持续更新中... 计网期末复习指南&#xff08;一&#xff09;&#xff1a;计算…

【wiki知识库】04.SpringBoot后端实现电子书的增删改查以及前端界面的展示

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 一、&#x1f525;今日内容 二、&#x1f30f;前端页面的改造 2.1新增电子书管理页面 2.2新增路由规则 2.3修改the-header代码 三、&#x1f697;SpringBoot后端Ebook模块改造 3.1增加电子书增/改接口 3.1.…

Cacti EZ中文版 12.2.27 ISO 下载安装

简介 修改了yum源为中国高校联合镜像源 github改为gitee。 系统增加中文语言包。 修改时区为东八区。 增加了常用的软件包。 PS&#xff1a;CactiEZ是一个自动化安装cacti和插件的ISO镜像&#xff0c;本教程的ISO是基于官方的IOS针对国内网络做了修改。 可按照目前最新的Ca…

[AI Google] 新的生成媒体模型和工具,专为创作者设计和构建

我们推出了 Veo&#xff0c;我们最强大的高清晰度视频生成模型&#xff0c;以及 Imagen 3&#xff0c;我们质量最高的文本生成图像模型。我们还分享了一些使用我们的 Music AI Sandbox 创作的新演示录音。 在过去的一年里&#xff0c;我们在提升生成媒体技术质量方面取得了令人…

智能售货机的小投入大回报创业机遇

智能售货机的小投入大回报创业机遇 在当今这个快速进化的数字时代&#xff0c;智能售货机作为零售领域的新秀&#xff0c;正以其独特的便捷性和创新性逐步重塑传统零售格局。24小时不间断服务与自动化管理的结合&#xff0c;大幅度削减人力成本&#xff0c;使得智能售货机成为…

生信算法7 - 核酸序列Fasta和蛋白PDB文件读写与检索

python 3.9实现以下算法。 1. 简单的写文件和读文件 # 写 file1 open(count.txt,w) file1.write(this is a test) file1.close()# 读 file2 open(my_file) print(file2.read())2. 将列表内容写入文本文件 # 生成100-500数字列表 data [i * 100 for i in range(1, 6)] pri…