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或者其他已知的默认值…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...
【Veristand】Veristand环境安装教程-Linux RT / Windows
首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...
Python学习(8) ----- Python的类与对象
Python 中的类(Class)与对象(Object)是面向对象编程(OOP)的核心。我们可以通过“类是模板,对象是实例”来理解它们的关系。 🧱 一句话理解: 类就像“图纸”,对…...
