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,用来表示客人的序号,初始值为 1print('为第' + str(i) + '位客人做一份蟹黄堡')
# 给当前客人做一份蟹黄堡
i += 1
# i 值加 1,招待下一位客人print('为第' + str(i) + '位客人做一份蟹黄堡')
i += 1print('为第' + str(i) + '位客人做一份蟹黄堡')
i += 1print('为第' + str(i) + '位客人做一份蟹黄堡')
i += 1print('为第' + 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 = 0while 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 和 99return 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 * 2int += 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_listi = 0while i < len(name_list):if name == name_list[i]:print(name + '是第' + str(i + 1) + '个到校的')returni += 1print(name + '逃课了')
checking('黄帮主')

3/3头疼的数学课

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

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

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

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

下篇预告:python中的for 循环

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【UnityShader入门精要学习笔记】第十七章 表面着色器

本系列为作者学习UnityShader入门精要而作的笔记&#xff0c;内容将包括&#xff1a; 书本中句子照抄 个人批注项目源码一堆新手会犯的错误潜在的太监断更&#xff0c;有始无终 我的GitHub仓库 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 文章目录 表面着色器…

2024年手机能做的赚钱软件有哪些?整理了八个手机能做的正规赚钱软件分享

在这个指尖滑动的时代&#xff0c;手机不仅仅是通讯工具&#xff0c;更是我们探索财富的钥匙。你是否曾幻想过&#xff0c;躺在沙发上&#xff0c;轻轻一滑&#xff0c;就能让钱包鼓起来&#xff1f; 今天&#xff0c;就让我们一起来探索那些隐藏在手机里的赚钱秘笈&#xff0c…

使用 Vue 3 和 vue-print-nb 插件实现复杂申请表的打印

文章目录 1&#xff1a;创建 Vue 3 项目2&#xff1a;安装 vue-print-nb 插件3&#xff1a;配置 vue-print-nb 插件4&#xff1a;创建一个复杂的申请表5&#xff1a;使用 ApplicationForm 组件6&#xff1a;运行项目 在开发管理系统或申请表打印功能时&#xff0c;打印功能是一…

光伏无人机踏勘需要使用哪些设备?用到哪些原理?

随着全球能源结构的转型和绿色能源的大力推广&#xff0c;光伏电站的建设和运维正成为能源领域的热点。然而&#xff0c;光伏电站的选址、建设和后期运维过程中&#xff0c;往往面临着地形复杂、设备分散、巡检难度大等挑战。在这一背景下&#xff0c;无人机踏勘技术以其独特的…

qt程序打包成一个exe

首先在release模式下编译然后用windeployqt打包 具体步骤参照我这篇文章&#xff1a; https://blog.csdn.net/weixin_73548574/article/details/134932044 然后使用一个加壳工具&#xff1a;https://enigmaprotector.com/en/downloads.html 下载安装后打开 到此完成&#…

c++题目_P1546 [USACO3.1] 最短网络 Agri-Net

题目背景 Farmer John 被选为他们镇的镇长&#xff01;他其中一个竞选承诺就是在镇上建立起互联网&#xff0c;并连接到所有的农场。当然&#xff0c;他需要你的帮助。 题目描述 FJ 已经给他的农场安排了一条高速的网络线路&#xff0c;他想把这条线路共享给其他农场。为了用…

数仓建模—指标拆解和选取

数仓建模—指标拆解和选取 第一节指标体系初识介绍了什么是指标体系 第二节指标体系分类分级和评价管理介绍了指标体系管理相关的,也就是指标体系的分级分类 这一节我们看一下指标体系的拆解和指标选取,这里我们先说指标选取,其实在整个企业的数字化建设过程中我们其实最…

进程和任务管理器

一、查看和控制进程 1.1ps命令 &#xff08;1&#xff09;ps 命令——查看静态的进程统计信息&#xff08;Processes Statistic&#xff09; PID TTY TIME CMD 1579 pts/1 00:00:00 bash 1730 pts/1 00:00:00 ps PID&#xff1a;进程IDTTY &#xff08;进程id&#xff0…

微信小程序发布遇到的一些问题记录

1.报错组件没有按需导入 在该路径配置微信小程序添加"lazyCodeLoading" : "requiredComponents" "mp-weixin" : { "appid" : "你的appid", "setting" : { "urlCheck" : f…

VS_图片转换点云

文章内容: 通过OpenCV读取图片数据将图片数据转换为点云显示点云保存点云到文件图片转换灰度图显示灰度图文章介绍 代码是用Ai工具生成后在VS上运行没有问题的。 可以参考里面读写PCL文件,PCL的显示等内容。 #include <opencv2/opencv.hpp> #include <pcl/io/pcd_…

ElementUI中date-picker组件,怎么给选择一个月份范围中大写月份改为阿拉伯数组月份(例如:一月、二月,改为1月、2月)

要将 Element UI 的 <el-date-picker> 组件中的月份名称从中文大写&#xff08;如 "一月", "二月"&#xff09;更改为阿拉伯数字&#xff08;如 "1月", "2月"&#xff09;&#xff0c;需要进行一些定制化处理。可以通过国际化&a…

企业微信接入系列-上传临时素材

企业微信接入系列-上传临时素材 文档介绍上传临时素材写在最后 文档介绍 创建企业群发的文档地址&#xff1a;https://developer.work.weixin.qq.com/document/path/92135&#xff0c;在创建企业群发消息或者群发群消息接口中涉及到上传临时素材的操作&#xff0c;具体文档地址…

网络服务DHCP的安装

DHCP的安装 检查并且安装dhcp有关软件包 rpm -qc dhcp #检查是否存在dhcp yum install -y dhcp #进行yum安装查看系统的配置文件 切换到对应目录查看相关文件配置&#xff0c;发现是空目录。 将官方提供的example复制到原配置文件中 cp /usr/share/doc/dhcp-4.2.5/dhcpd.…

Python | 链表的基础操作1

面向对象&#xff1a; “对象”实际上是对现实世界中所存在的事物的一种抽象 人拥有着一些静态的特征&#xff0c;比如身高、体重、性别等&#xff0c;也拥有一些动态的行为&#xff0c;比如吃法&#xff0c;睡觉等&#xff0c;而在计算机世界中&#xff0c;我们将之抽象为一个…

什么是室内外一体化定位

室内外一体化定位是一种技术&#xff0c;它允许在室内外环境中对设备或人员进行连续、无缝的定位跟踪。这种技术结合了多种定位技术的优势&#xff0c;以克服单一技术在室内外环境中可能遇到的局限性。 室内外一体化定位通常涉及以下几种技术&#xff1a; 1. 卫星定位系统&am…

汽车软件单元测试分析

汽车软件单元测试概述 随着汽车技术的不断发展,汽车的功能日益复杂,软件在汽车中的作用也变得越来越重要。汽车嵌入式软件的质量直接关系到汽车的安全性、可靠性和性能表现。在这样的背景下,汽车软件单元测试成为了确保软件质量的关键环节。 汽车嵌入式软件单元测试是指对汽…

手撕C语言题典——相交链表

目录 前言 一&#xff0c;思路 1&#xff09;暴力 2)同步指针 二&#xff0c;代码实现 前言 依旧是力扣上的一道题&#xff0c;有许多新思路提供给我们 160. 相交链表 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/intersection-of-two-linked-li…

Go中字符串转成byte数组,会发生内存拷贝吗?

引言 在Go语言中&#xff0c;字符串和字节切片是两种常见的数据类型&#xff0c;它们在内存中的表现和操作方式有着本质的不同。字符串是不可变的&#xff0c;而字节切片则是可变的。在日常开发中&#xff0c;我们经常需要在这两种类型之间进行转换。那么&#xff0c;当字符串…

c#入门详解:接口详解

接口&#xff08;interface&#xff09; 抽象类中的抽象方法只规定了不能是 private 的&#xff0c;而接口中的“抽象方法”只能是 public 的。这样的成员访问级别就决定了接口的本质&#xff1a;接口是服务消费者和服务提供者之间的契约。既然是契约&#xff0c;那就必须是透…

Message passing mechanism (消息传递机制)

objc_msgSend 是 Objective-C 运行时系统中的一个核心函数&#xff0c;用于实现消息传递机制。在 Objective-C 中&#xff0c;方法调用实际上是消息传递的过程&#xff0c;当你在代码中调用一个方法时&#xff0c;编译器会将其转换为 objc_msgSend 函数的调用。 objc_msgSend …