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或者其他已知的默认值…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...

Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...