Python入门(十一)while循环(一)

while循环(一)

  • 1.简介
  • 2.使用while循环
  • 3.让用户选择何时退出
  • 4.使用标志
  • 5.使用break退出循环
  • 6.在循环中使用continue
  • 7.避免无限循环

作者:xiou

1.简介

for循环用于针对集合中的每个元素都执行一个代码块,而while循环则不断运行,直到指定的条件不满足为止。

2.使用while循环

可使用while循环来数数。例如,下面的while循环从1数到5:

current_number = 1
while current_number <= 5:
    print(current_number)
    current_number += 1

在第一行,将1赋给变量current_number,从而指定从1开始数。将接下来的while循环设置成:只要current_number小于或等于5,就接着运行这个循环。循环中的代码打印current_number的值,再使用代码current_number += 1(代码current_number = current_number + 1的简写)将其值加1。

只要满足条件current_number <= 5,Python就接着运行这个循环。因为1小于5,所以Python打印1并将current_number加1,使其为2;因为2小于5,所以Python打印2并将current_number加1,使其为3;依此类推。一旦current_number大于5,循环就将停止,整个程序也将结束:

在这里插入图片描述

你每天使用的程序很可能就包含while循环。例如,游戏使用while循环,确保在玩家想玩时不断运行,并在玩家想退出时停止运行。如果程序在用户没有让它停止时停止运行,或者在用户要退出时还继续运行,那就太没有意思了。因此,while循环很有用。

3.让用户选择何时退出

可以使用while循环让程序在用户愿意时不断运行,如下面的程序parrot.py所示。我们在其中定义了一个退出值,只要用户输入的不是这个值,程序就将接着运行:

  prompt = "\nTell me something, and I will repeat it back to you:"
  prompt += "\nEnter 'quit' to end the program. "
  message = ""
  while message != 'quit':
      message = input(prompt)
      print(message)

定义了一条提示消息,告诉用户有两个选择:要么输入一条消息,要么输入退出值(这里为’quit’)。接下来,创建变量message,用于记录用户输入的值。
我们将变量message的初始值设置为空字符串"",让Python首次执行while代码行时有可供检查的东西。Python首次执行while语句时,需要将message的值与’quit’进行比较,但此时用户还没有输入。如果没有可供比较的东西,Python将无法继续运行程序。
为解决这个问题,必须给变量message指定初始值。虽然这个初始值只是一个空字符串,但符合要求,能够让Python执行while循环所需的比较。只要message的值不是’quit’,这个循环就会不断运行。

首次遇到这个循环时,message是一个空字符串,因此Python进入该循环。执行到代码行message = input(prompt)时,Python显示提示消息,并等待用户输入。不管用户输入是什么,都将赋给变量message并打印出来。接下来,Python重新检查while语句中的条件。只要用户输入的不是单词’quit’,Python就会再次显示提示消息并等待用户输入。等到用户终于输入’quit’后,Python停止执行while循环,整个程序也到此结束:

在这里插入图片描述

4.使用标志

在前一个示例中,我们让程序在满足指定条件时执行特定的任务。但在更复杂的程序中,很多不同的事件会导致程序停止运行。在这种情况下,该怎么办呢?

例如,有多种事件可能导致游戏结束,如玩家失去所有飞船、时间已用完,或者要保护的城市被全部摧毁。导致程序结束的事件有很多时,如果在一条while语句中检查所有这些条件,将既复杂又困难。

在要求很多条件都满足才继续运行的程序中,可定义一个变量,用于判断整个程序是否处于活动状态。这个变量称为标志(flag),充当程序的交通信号灯。可以让程序在标志为True时继续运行,并在任何事件导致标志的值为False时让程序停止运行。这样,在while语句中就只需检查一个条件:标志的当前值是否为True。然后将所有其他测试(是否发生了应将标志设置为False的事件)都放在其他地方,从而让程序更整洁。

将其命名为active(你可给它指定任何名称),用于判断程序是否应继续运行:

  prompt = "\nTell me something, and I will repeat it back to you:"
  prompt += "\nEnter 'quit' to end the program. "

  active = True
  while active:
      message = input(prompt)

      if message == 'quit':
          active = False
      else:
          print(message)

将变量active设置为True,让程序最初处于活动状态。这样做简化了while语句,因为不需要在其中做任何比较——相关的逻辑由程序的其他部分处理。只要变量active为True,循环就将继续运行。

在while循环中,在用户输入后使用一条if语句来检查变量message的值。如果用户输入的是’quit’,就将变量active设置为False。这将导致while循环不再继续执行。如果用户输入的不是’quit’,就将输入作为一条消息打印出来。

在这里插入图片描述

这个程序的输出与前一个示例相同。前一个示例将条件测试直接放在了while语句中,而这个程序则使用一个标志来指出程序是否处于活动状态。这样,如果要添加测试(如elif语句)以检查是否发生了其他导致active变为False的事件,就会很容易。在复杂的程序(如很多事件会导致程序停止运行的游戏)中,标志很有用:在任意一个事件导致活动标志变成False时,主游戏循环将退出,此时可显示一条游戏结束消息,并让用户选择是否要重新玩。

5.使用break退出循环

要立即退出while循环,不再运行循环中余下的代码,也不管条件测试的结果如何,可使用break语句。break语句用于控制程序流程,可用来控制哪些代码行将执行、哪些代码行不执行,从而让程序按你的要求执行你要执行的代码。

例如,来看一个让用户指出他到过哪些地方的程序。在这个程序中,可在用户输入’quit’后使用break语句立即退出while循环:

  prompt = "\nPlease enter the name of a city you have visited:"
  prompt += "\n(Enter 'quit' when you are finished.) "

  while True:
      city = input(prompt)

      if city == 'quit':
          break
      else:
          print(f"I'd love to go to {city.title()}!")

以while True打头的循环将不断运行,直到遇到break语句。这个程序中的循环不断让用户输入他到过的城市的名字,直到用户输入’quit’为止。用户输入’quit’后,将执行break语句,导致Python退出循环:

在这里插入图片描述

注意 在任何Python循环中都可使用break语句。例如,可使用break语句来退出遍历列表或字典的for循环。

6.在循环中使用continue

要返回循环开头,并根据条件测试结果决定是否继续执行循环,可使用continue语句,它不像break语句那样不再执行余下的代码并退出整个循环。例如,来看一个从1数到10但只打印其中奇数的循环:

  current_number = 0
  while current_number < 10:
      current_number += 1
      if current_number % 2 == 0:
          continue

      print(current_number)

首先将current_number设置为0,由于它小于10,Python进入while循环。进入循环后,以步长1的方式往上数,因此current_number为1。接下来,if语句检查current_number与2的求模运算结果。如果结果为0(意味着current_number可被2整除),就执行continue语句,让Python忽略余下的代码,并返回循环的开头。如果当前的数不能被2整除,就执行循环中余下的代码,将这个数打印出来:

在这里插入图片描述

7.避免无限循环

每个while循环都必须有停止运行的途径,这样才不会没完没了地执行下去。例如,下面的循环从1数到5:

x = 1
while x <= 5:
    print(x)
    x += 1

但如果像下面这样不小心遗漏了代码行x += 1,这个循环将没完没了地运行:

# 这个循环将没完没了地运行!
x = 1
while x <= 5:
    print(x)

在这里,x的初始值为1,但根本不会变。因此条件测试x <= 5始终为True,导致while循环没完没了地打印1,如下所示:
在这里插入图片描述

每个程序员都会偶尔因不小心而编写出无限循环,在循环的退出条件比较微妙时尤其如此。如果程序陷入无限循环,可按Ctrl+ C,也可关闭显示程序输出的终端窗口。

要避免编写无限循环,务必对每个while循环进行测试,确保其按预期那样结束。如果你希望程序在用户输入特定值时结束,可运行程序并输入这样的值。如果在这种情况下程序没有结束,请检查程序处理这个值的方式,确认程序至少有一个这样的地方能让循环条件为False,或者让break语句得以执行。

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

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

相关文章

虚幻引擎4利用粒子系统实现物体轨迹描绘

虚幻引擎4利用粒子系统实现物体轨迹描绘 目录 虚幻引擎4利用粒子系统实现物体轨迹描绘前言粒子系统利用粒子系统实现物体轨迹描绘创建粒子系统将粒子系统的产生位置绑定到运动物体上 小结 前言 由于在物体运动时&#xff0c;想要观察其总的运动轨迹&#xff0c;以便对其控制做…

CANoe-如何在Trace窗口显示SYN和FIN报文、同一条以太网报文在Trace窗口中的多条显示

1、如何在Trace窗口显示SYN和FIN报文 当我们使用CANoe实现TCP通信时,希望在Trace窗口直观显示报文的类型:SYN、ACK、FIN。显然Trace窗口也是支持这样的功能的。但很多时候由于一些人为的不正确的设置和配置,造成无法显示。 如果想解析出SYN报文,首先在Trace窗口选择正确的…

java注解

Target({ElementType.METHOD, ElementType.TYPE}) 注解的适用范围&#xff0c;可以用在什么地方&#xff0c;超过这个作用范围,编译的时候就会报错 值说明ElementType.METHOD用于描述方法ElementType.TYPE用于描述类、接口(包括注解类型) 或enum声明ElementType.LOCAL_VARIAB…

编程语言中,循环变量通常都用 i?你知道为什么吗?

01 前天&#xff0c;我在朋友圈发了一个问题&#xff1a; 为什么编程中&#xff0c;循环变量通常都是用 i ? 没想到&#xff0c;回复的人这么多&#xff01;要连翻好几页。 这个问题&#xff0c;有 2/3 的人回答正确&#xff0c;有少部分人知道&#xff0c;但是不太确定。 习惯…

camunda如何发布和调用rest服务接口

一、camunda如何发布rest服务接口 Camunda BPM 平台本身提供了 REST API 接口&#xff0c;可以用于管理和操作 Camunda 平台中的各种资源和数据&#xff0c;如流程定义、流程实例、任务等。因此&#xff0c;我们可以通过编写 Camunda 应用程序的方式&#xff0c;将 Camunda RE…

最流行的开源 LLM (大语言模型)整理

本文对国内外公司、科研机构等组织开源的 LLM 进行了全面的整理。 Large Language Model (LLM) 即大规模语言模型&#xff0c;是一种基于深度学习的自然语言处理模型&#xff0c;它能够学习到自然语言的语法和语义&#xff0c;从而可以生成人类可读的文本。 所谓"语言模…

基于DBSCAN密度聚类的风电-负荷场景削减方法

​目录 ​ 1 主要内容 基于密度聚类的数据预处理&#xff1a; 场景提取&#xff1a; 算法流程&#xff1a; 2 部分程序 3 程序结果 4 下载链接 1 主要内容 该程序复现文章《氢能支撑的风-燃气耦合低碳微网容量优化配置研究》第三章内容&#xff0c;实现的是基于DBSCAN…

八股文大全

八股文大全 1. 基础篇1.1 网络基础1.1.1 TCP 三次握手1.1.2 TCP四次挥手![在这里插入图片描述](https://img-blog.csdnimg.cn/90a6997e8d414c84b499167c99da0397.png)1.1.3 TCP常见面试题 1. 基础篇 1.1 网络基础 1.1.1 TCP 三次握手 三次握手过程&#xff1a; 客户端——发…

开心档之MySQL 数据类型

目录 MySQL 数据类型 数值类型 日期和时间类型 字符串类型 MySQL 中定义数据字段的类型对你数据库的优化是非常重要的。 MySQL 支持多种类型&#xff0c;大致可以分为三类&#xff1a;数值、日期/时间和字符串(字符)类型。 数值类型 MySQL 支持所有标准 SQL 数值数据类型…

【信息安全案例】——信息内容安全(学习笔记)

&#x1f4d6; 前言&#xff1a;在数字化时代&#xff0c;信息内容安全问题越来越引起人们的关注。信息内容安全主要包括对数据的机密性、完整性和可用性的保护&#xff0c;以及对用户隐私的保护等方面。针对信息内容安全的威胁&#xff0c;采取科学有效的安全措施和技术手段至…

面试京东失败,再看看2年前的面试题,根本不是一个难度···

刚从京东走出来&#xff0c;被二面难到了&#xff0c;我记得学长两年前去面试的时候&#xff0c;问的问题都特别简单&#xff0c;咋现在难度高了这么多。面试前我也刷过很多的题和看过很多资料&#xff0c;后来想想&#xff0c;这年头网上资料泛滥&#xff0c;测试面试文档更是…

从零玩转设计模式之外观模式-waiguanmos

title: 从零玩转设计模式之外观模式 date: 2022-12-12 15:49:05.322 updated: 2022-12-23 15:34:40.394 url: https://www.yby6.com/archives/waiguanmos categories: - 设计模式 tags: - 设计模式 什么是外观模式 外观模式是一种软件设计模式&#xff0c;它提供了一种将多个…

FastAPI 的路由介绍及使用

上一篇文章中&#xff0c;我介绍了 FastAPI 框架的安装和 HelloWorld 项目搭建方式。本文将介绍如何使用 Router 路由处理 FastAPI 中的请求。 什么是路由 路由 Router 就像是一个流水线上的线长&#xff0c;协调生产&#xff0c;下达命令给不同的组长进行分工&#xff0c;然…

Android实例——拼图游戏

拼图游戏 项目简介权限adapterPictureListAdapterPuzzleAdapter beanItemBean PresenterIPuzzlePresenterPuzzlePresenterImpl uiIGameCallback utilsConstantImagesUtilsScreenUtils ViewMainActivityPuzzleActivity 布局activity_main.xmlactivity_puzzle.xml 项目简介 选择…

手写西瓜书bp神经网络 mnist10 c#版本

本文根据西瓜书第五章中给出的公式编写&#xff0c;书中给出了全连接神经网络的实现逻辑&#xff0c;本文在此基础上编写了Mnist10手写10个数字的案例&#xff0c;网上也有一些其他手写的例子参考。demo使用unity进行编写&#xff0c;方便且易于查错。 该案例仅作为学习&#x…

ROS学习(1)——ROS1和ROS2的区别

因为机器人是一个系统工程&#xff0c;它包括了机械臂结构&#xff0c;电子电路&#xff0c;驱动程序&#xff0c;通信框架&#xff0c;组装集成&#xff0c;调试和各种感知决策算法等方面&#xff0c;任何一个人甚至是一个公司都不可能完成机器人系统的研发工作 。但是我们又希…

TMP的阴影性能如何

1&#xff09;TMP的阴影性能如何 ​2&#xff09;CommandBuffer.DrawMeshInstanced无法画阴影问题 3&#xff09;Unity编辑器在Require大量加载Lua文件时&#xff0c;经常报出not enough memory 4&#xff09;场景制作的时候&#xff0c;2D资源受后处理调色影响比较大 这是第33…

数据结构:栈和队列

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下栈和队列方面的相关知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通…

面试了一个00后,绝对能称为是内卷届的天花板

前言 公司前段缺人&#xff0c;也面了不少测试&#xff0c;结果竟然没有一个合适的。一开始瞄准的就是中级的水准&#xff0c;也没指望来大牛&#xff0c;提供的薪资也不低&#xff0c;面试的人很多&#xff0c;但平均水平很让人失望。令我印象最深的是一个00后测试员&#xf…

期刊介绍|骨科老牌期刊,无版面费,审稿极速,毕业不二之选!

今天给大家介绍一本中药方面的期刊&#xff1a;JOURNAL OF ORTHOPAEDIC RESEARCH 一、基本信息 1、期刊名称&#xff1a;JOURNAL OF ORTHOPAEDIC RESEARCH&#xff1b; 2、期刊ISSN: 0736-0266&#xff1b; 3、研究方向&#xff1a;医学-整形外科&#xff1b; 4、出版社&#x…