02-5.python入门基础一控制流(while)

Python 控制流是指控制程序执行顺序的机制,它允许程序根据不同的条件和情况执行不同的代码块或重复执行某些代码。
while 循环的用法与示例

语法结构及要点
在 Python 中,while循环是一种基于条件判断的循环结构,其语法构成如下:
| while 循环条件: 循环体代码 |
这里的 “循环条件” 通常是一个布尔表达式,也就是其结果会被判定为真(True)或者假(False)的表达式,常见的如比较运算(像 >、<、==、>=、<=、!= 等)、逻辑运算(and、or、not 等)组成的表达式都可以充当循环条件。
而 “循环体代码” 就是在满足循环条件的情况下,会被重复执行的一段代码,它需要进行缩进,一般推荐使用四个空格来缩进,并且在同一个while循环的循环体中缩进量要保持一致,不然 Python 解释器可能会报错或者出现不符合预期的执行逻辑。
例如,我们想要实现一个简单的从 1 累加到某个数字的操作,可以这样写代码:
| num = 1 sum_result = 0 while num <= 10: # 循环条件为num小于等于10 sum_result += num num += 1 # 改变num的值,否则可能陷入死循环 print(sum_result) |
在上述代码中,首先初始化了变量num为 1 以及用于累加结果的变量sum_result为 0,然后通过while循环,只要num小于等于 10 这个条件成立,就会执行循环体中的代码,也就是不断把num累加到sum_result中,并且每次循环让num的值加 1,直到num大于 10 时循环结束,最终输出累加的结果。可以看到循环条件的设置至关重要,它决定了循环何时开始以及何时结束,而循环体代码则是我们期望重复执行的具体操作内容。
条件循环示例
下面来看一些具体的条件循环示例,帮助大家更好地理解while循环的运行逻辑。
假设我们要实现一个功能,统计一个正整数从自身开始,每次减 1,直到减到 1 为止的过程中所有数字的和。代码示例如下:
| n = 10 # 这里假设初始的正整数为10,可自行更改这个值进行测试 total_sum = 0 while n > 0: total_sum += n n -= 1 print(f"从{n + 1}累加到1的总和是: {total_sum}") |
在这段代码里,首先定义了变量n表示初始的正整数,total_sum用来记录累加的和。然后while循环的条件是n > 0,只要这个条件满足,就会执行循环体代码,在循环体中把当前的n累加到total_sum里,并且让n的值减 1,如此反复,直到n不大于 0 了,循环结束,最后输出累加的总和。
再比如,我们要输出一个列表中所有大于 5 的元素,代码可以这样写:
| num_list = [3, 7, 1, 9, 4, 8] index = 0 while index < len(num_list): if num_list[index] > 5: print(num_list[index]) index += 1 |
这里先定义了一个包含若干数字的列表num_list,同时初始化了一个索引变量index为 0。通过while循环,以index小于列表长度作为循环条件,在循环体中先判断当前索引位置的列表元素是否大于 5,如果大于 5 就输出该元素,然后让index的值加 1,去检查下一个位置的元素,直到遍历完整个列表,循环结束。
无限循环及控制示例
在 Python 中,有一种特殊情况就是while True这样的写法,它代表着一个无限循环,因为条件True始终是成立的。不过在实际应用中,我们通常需要结合一些条件判断以及控制语句(比如if语句和break语句等)来合理地终止这个无限循环,避免程序陷入死循环无法停止。
例如,我们可以通过不断接收用户输入的成绩,然后判断成绩等级并输出相应提示,直到用户输入特定的结束标识(这里假设输入 -1 表示结束)来结束循环,代码如下:
| while True: score = input("请输入成绩(输入 -1 结束程序):") score = float(score) # 将输入的字符串转换为数值类型 if score == -1: print("程序结束!") break elif score >= 90: print("优秀") elif score >= 80: print("良好") elif score >= 70: print("中等") elif score >= 60: print("及格") else: print("不及格") |
在上述代码中,while True开启了一个无限循环,每次循环都会提示用户输入成绩,然后把输入的字符串转换为数值类型后进行条件判断。如果用户输入的是 -1,就会执行if语句中的break语句,从而终止整个while循环;如果输入的是其他成绩数值,就会进入相应的成绩等级判断elif语句块,输出对应的等级提示,接着又会回到循环开头继续等待下一次用户输入,如此反复,直到接收到结束标识退出循环。
再比如,模拟一个简单的猜数字游戏,让用户不断猜测一个预先设定好的数字(这里假设数字为 50),直到猜对为止,代码实现如下:
| secret_number = 50 while True: guess = int(input("请猜一个数字:")) if guess == secret_number: print("恭喜你,猜对啦!") break elif guess > secret_number: print("猜大了哦,再猜猜看。") else: print("猜小了哦,再猜猜看。") |
在这个例子里,同样是while True的无限循环结构,用户每次输入猜测的数字后,通过if-elif语句进行判断,如果猜对了就执行break语句结束循环,要是猜大了或者猜小了就会给出相应提示,然后继续循环让用户再次猜测,直到猜对数字为止。
模拟 do while 循环示例
在 Python 中并没有内置像其他一些编程语言(如 C、C++ 等)那样的do while循环结构,但我们可以通过一定的代码修改来模拟实现类似的效果,也就是保证循环体代码至少执行一次后,再根据条件判断是否继续循环。
以下是模拟do while循环的一般步骤及示例:
步骤一:初始化循环条件变量,并且设置一个初始值使得循环体能够至少执行一次,例如:
| condition = True |
步骤二:使用while循环,将刚才初始化的条件变量作为循环条件,在循环体中编写我们期望至少执行一次且后续根据条件判断是否重复执行的代码,示例如下:
| while condition: print("这是循环体代码,至少会执行一次哦。") # 这里可以添加更多循环体的具体操作代码 |
步骤三:在循环体执行完一次后,添加代码来检查和更新循环条件变量的值,根据实际需求决定是否继续循环,比如:
| while condition: print("这是循环体代码,至少会执行一次哦。") # 模拟一些操作后,根据情况更新条件变量 user_input = input("你想继续循环吗?(输入y继续,其他任意字符结束)") if user_input.lower()!= "y": condition = False |
完整的示例代码如下:
| condition = True while condition: print("正在执行循环体的操作...") user_choice = input("输入1继续循环,输入其他数字结束循环:") if user_choice!= "1": condition = False |
在这个示例中,一开始condition为True,所以循环体代码会先执行一次,输出相应提示信息,然后提示用户输入内容来决定是否继续循环。如果用户输入的不是 “1”,就会把condition设置为False,下次循环判断条件时就不满足了,循环就会结束,以此实现了类似其他语言中do while循环 “先执行一次,再根据条件判断后续是否继续” 的功能特点。
相关文章:
02-5.python入门基础一控制流(while)
Python 控制流是指控制程序执行顺序的机制,它允许程序根据不同的条件和情况执行不同的代码块或重复执行某些代码。 while 循环的用法与示例 语法结构及要点 在 Python 中,while循环是一种基于条件判断的循环结构,其语法构成如下:…...
Go语言开发入门与实战
Go语言(简称Golang)由Google开发,是一门现代化的编程语言,因其简洁高效、并发支持友好、跨平台特性而在后端服务开发、云计算等领域大放异彩。本文将介绍Go语言的基本特点、开发环境配置,并通过一个简单的实战项目带领大家快速上手。 一、Go语言的特点 简单易学:语法简洁…...
HarmonyOS Next应用开发实战:ArkWeb组件使用介绍及使用举例
ArkWeb简介 ArkWeb(方舟Web)是HarmonyOS Next中提供的一个Web组件,主要用于在应用程序中显示Web页面内容。这个组件使得开发者可以在HarmonyOS应用中嵌入Web页面,从而降低开发成本,提升开发和运营效率。 使用场景 A…...
【已解决】在Visual Studio里将应用与Microsoft Store关联时提示网络异常
发布Windows应用时。在Visual Studio里点击"发布“,将应用与Microsoft Store关联时,一直提示网络错误。 查了一下论坛,发现之前也经常出现,但我是第一次遇到。 不能就这样一直被卡着呀,研究了一下,还…...
springcloud-gateway获取应用响应信息乱码
客户端通过springcloud gateway跳转访问tongweb上的应用,接口响应信息乱码。使用postman直接访问tongweb上的应用,响应信息显示正常。 用户gateway中自定义了实现GlobalFilter的Filter类,在该类中获取了上游应用接口的响应信息,直…...
[笔记]关于Qt的nativeEvent事件无法接收window消息的Bug
1.nativeEvent事件无法接收window消息 此处不是nativeEvent不能接收,是possmessage一定要写对发送的软件名称,这个名称在Qt中是主界面类的名称,就是主界面UI的名称,而不是rc文件中定义的名称。 所以在FindWindow函数获取目标窗口…...
LeetCode 热题 100_K 个一组翻转链表(31_25_困难_C++)(四指针法)
LeetCode 热题 100_K 个一组翻转链表(31_25) 题目描述:输入输出样例:题解:解题思路:思路一(四指针法): 代码实现代码实现(思路一(四指针法&#x…...
Pytorch | 从零构建MobileNet对CIFAR10进行分类
Pytorch | 从零构建MobileNet对CIFAR10进行分类 CIFAR10数据集MobileNet设计理念网络结构技术优势应用领域 MobileNet结构代码详解结构代码代码详解DepthwiseSeparableConv 类初始化方法前向传播 forward 方法 MobileNet 类初始化方法前向传播 forward 方法 训练和测试训练代码…...
CSS系列(18)-- 工程化实践详解
前端技术探索系列:CSS 工程化实践详解 🏗️ 致读者:探索 CSS 工程化之路 👋 前端开发者们, 今天我们将深入探讨 CSS 工程化实践,学习如何在大型项目中管理 CSS。 工程化配置 🚀 项目结构 …...
日拱一卒(18)——leetcode学习记录:二叉树中的伪回文路径
一、题目 给你一棵二叉树,每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的,当它满足:路径经过的所有节点值的排列中,存在一个回文序列。 请你返回从根到叶子节点的所有路径中 伪回文 路径的数目。 二、思路 …...
hive—炸裂函数explode/posexplode
1、Explode炸裂函数 将hive某列一行中复杂的 array 或 map 结构拆分成多行(只能输入array或map) 语法: select explode(字段) as 字段命名 from 表名; 举例: 1)explode(array)使得结果中将array列表里的每个元素生…...
SpringBoot 新特性
优质博文:IT-BLOG-CN 2.1.0新特性最低支持jdk8,支持tomcat9 对响应式编程的支持,spring-boot-starter-webflux starter POM可以快速开始使用Spring WebFlux,它由嵌入式Netty服务器支持 1.5.8 2.1.0/2.7.0/3.0.0 Configuration propertie…...
鸿蒙app封装 axios post请求失败问题
这个问题是我的一个疏忽大意,在这里记录一下。如果有相同问题的朋友,可以借鉴。 当我 ohpm install ohos/axios 后,进行简单post请求验证,可以请求成功。 然后,我对axios 进行了封装。对axios 添加请求拦截器/添加响…...
消息队列 Kafka 架构组件及其特性
Kafka 人们通常有时会将 Kafka 中的 Topic 比作队列; 在 Kafka 中,数据是以主题(Topic)的形式组织的,每个 Topic 可以被分为多个分区(Partition)。每个 Partition 是一个有序的、不可变的消息…...
网络攻击与防范
目录 选填 第一章 1、三种网络模式 2、几种创建网络拓扑结构 NAT模式 VPN模式 软路由模式1 软路由模式2 3、Linux网络配置常用指令 4、常见网络服务配置 DHCP DNS Web服务与FTP服务 FTP用户隔离 第二章 DNS信息收集(dnsenum、dnsmap) 路…...
文献研读|基于像素语义层面图像重建的AI生成图像检测
前言:本篇文章主要对基于重建的AI生成图像检测的四篇相关工作进行介绍,分别为基于像素层面重建的检测方法 DIRE 和 Aeroblade,以及基于语义层面重建的检测方法 SimGIR 和 Zerofake;并对相应方法进行比较。 相关文章:论…...
【操作系统】为什么需要架构裁剪?
为什么需要架构裁剪? 原因 减小核心大小提高架构初始化速度降低内存占用提高系统性能移除不需要的功能,增加安全性 裁剪方法 初始化配置设置功能模块化移除不需要的驱动底层 一般裁剪对象(以操作系统为例) 文件系统的支持网…...
LSTM长短期记忆网络
LSTM(长短期记忆网络)数学原理 LSTM(Long Short-Term Memory)是一种特殊的递归神经网络(RNN),解决了标准RNN中存在的梯度消失(Vanishing Gradient) 和**梯度爆炸&#x…...
基于前端技术UniApp和后端技术Node.js的电影购票系统
文章目录 摘要Abstruct第一章 绪论1.1 研究背景与意义1.2 国内外研究现状 第二章 需求分析2.1 功能需求分析2.2 非功能性需求分析 第二章系统设计3.1 系统架构设计3.1.1 总体架构3.1.2 技术选型 3.2 功能架构 第四章 系统实现4.1 用户端系统实现4.1.1 用户认证模块实现4.1.2 电…...
数据结构与算法:稀疏数组
前言 此文以整型元素的二维数组为例,阐述稀疏数组的思想。其他类型或许有更适合压缩算法或者其他结构的稀疏数组,此文暂不扩展。 稀疏数组的定义 在一个二维数据数组里,由于大量的元素的值为同一个值,比如 0或者其他已知的默认值…...
观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
STM32F4基本定时器使用和原理详解
STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
