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

铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...

9-Oracle 23 ai Vector Search 特性 知识准备
很多小伙伴是不是参加了 免费认证课程(限时至2025/5/15) Oracle AI Vector Search 1Z0-184-25考试,都顺利拿到certified了没。 各行各业的AI 大模型的到来,传统的数据库中的SQL还能不能打,结构化和非结构的话数据如何和…...

【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...