当前位置: 首页 > news >正文

【Python从入门到进阶】10、流程控制语句-循环语句(for-while)

接上篇《9、流程控制语句-条件语句(if-else)》
上一篇我们学习了Python的控制流语句的概念,以及其中的条件语句(if/else),本篇我们来学习控制流语句中的循环语句(for/while)。

一、Python中的循环

Python的循环结构就是让程序“杀个回马枪”,不断地重复执行同一段代码。Python中的循环语句有2种,分别是for循环和while循环,我们下面一一来进行讲解。

二、for循环

1、语法格式

for 循环的语法格式如下:

for 迭代变量 in 字符串|列表|元组|字典|集合:代码块

语法中的迭代变量,就是用来存放从后面的序列类型的集合中取出来的单个元素。代码块是用来进行循环调用的代码,也被成为循环体。

for语句的大致执行流程图如下所示:

2、核心功能

for循环最重要的也是最核心的功能就是遍历,坦白点说就是一个一个的输出。例如下面这个例子,我们想一个个的打印python字符串的每一个字符,如果没有for循环,是这样的:

s = "python"
print("第1个字符是:",s[0])
print("第2个字符是:",s[1])
print("第3个字符是:",s[2])
print("第4个字符是:",s[3])
print("第5个字符是:",s[4])
print("第6个字符是:",s[5])

效果:

第1个字符是: p
第2个字符是: y
第3个字符是: t
第4个字符是: h
第5个字符是: o
第6个字符是: n

这样固然是可以全部遍历,但是如果有一百个或一万个字符呢?所以我们要是用简便的方法来循环内容。

有了for循环,就可以在for循环的代码块中不停的循环遍历:

s = "python"
i = 1
for ch in s:print(f"第{i}个字符是:", ch)i+=1

效果:

第1个字符是: p
第2个字符是: y
第3个字符是: t
第4个字符是: h
第5个字符是: o
第6个字符是: n

这里只需要编写一个for循环结构即可解决这个问题。

3、遍历列表和元组

当用for循环遍历list列表或者tuple元组时,其迭代变量会先后被赋值为列表或元组中的每个元素并执行一次循环体。实例:

#列表
test_list = [110,120,119]
for n in test_list:print("n = ",n)#元组
test_tuple = (66,88,99)
for m in test_tuple:print("m = ",m)

效果:

n =  110
n =  120
n =  119
m =  66
m =  88
m =  99

如果我们想获取列表的下标,可以利用range函数,这里介绍一下range函数,range()函数能够轻松地生成一系列的数字,格式:

range(开始数字,结束数字) 或 range(结束数字)

range()函数的用法是:让Python从指定的第一个值开始,一直数到指定的第二个值停止,但不包含第二个值。如果参数仅有一个数字,则默认从0开始遍历。
比如:

>>> list(range(1,6))
[1, 2, 3, 4, 5]

注意:range()函数的返回值类型为range,并不直接是列表类型(list),而如果想要得到range()函数创建的数字列表,需要借助list()函数。

range还可以指定步长,格式:

range(开始数字,结束数字,步长)

函数range()从“开始数字”开始数,然后不断地加“步长”数字,直到达到或超过终值“结束数字”。
比如:

>>> n = list(range(2,11,2))
>>> print(n)
[2, 4, 6, 8, 10]

所以我们借助这个思路,可以思考一下,一般list列表或者tuple元组的长度都是从0开始,然后到len(列表或元组)结束(len()函数用于计算列表等多元素集合的长度),所以获取列表或元组的所有下标的函数应写为:

range(0,len(列表或元组变量名))

所以当上面的代码需要打印下标的时候,代码为:

#列表
test_list = [110,120,119]
for i in range(0,len(test_list)):print(f"test_list[{i}] = ",test_list[i])#元组
test_tuple = (66,88,99)
for j in range(0,len(test_tuple)):print(f"test_tuple[{j}] = ",test_tuple[j])

效果:

test_list[0] =  110
test_list[1] =  120
test_list[2] =  119
test_tuple[0] =  66
test_tuple[1] =  88
test_tuple[2] =  99

4、遍历字典

如果使用for循环直接遍历字典,则迭代变量会被先后赋值为每个键值对中的键,如下:

per_con = {'姓名': "光仔December",'年龄': "30岁",'学校': "河南理工大学"}
for ele in per_con:print('ele =', ele)

结果:

ele = 姓名
ele = 年龄
ele = 学校

在使用for循环遍历字典时,经常会用到和字典相关的3个方法,即items()、keys()以及values(),其中items()是每个键值对元素,keys()是键,values()是值,所以可以这样获取字典中的每个元素、每个元素的键,每个元素的值:

per_con = {'姓名': "光仔December",'年龄': "30岁",'学校': "河南理工大学"}
for ele in per_con.items():print('键值对元素 =', ele)
for key,value in per_con.items():print(f'key = {key},value = {value}')
for ele in per_con.keys():print('元素的key =', ele)
for ele in per_con.values():print('元素的value =', ele)

结果:

键值对元素 = ('姓名', '光仔December')
键值对元素 = ('年龄', '30岁')
键值对元素 = ('学校', '河南理工大学')
key = 姓名,value = 光仔December
key = 年龄,value = 30岁
key = 学校,value = 河南理工大学
元素的key = 姓名
元素的key = 年龄
元素的key = 学校
元素的value = 光仔December
元素的value = 30岁
元素的value = 河南理工大学

三、while循环

while循环和if条件分支语句类似,即在条件(表达式)为真的情况下,会执行相应的代码块。不同之处在于,只要条件为真,while就会一直重复执行那段代码块。语法格式如下:

while 条件表达式:代码块

这里的代码块,指的是缩进格式相同的多行代码,不过在循环结构中,它又称为循环体。
while语句执行的具体流程为:首先判断条件表达式的值,其值为真(True)时,则执行代码块中的语句,当执行完毕后,再回过头来重新判断条件表达式的值是否为真,若仍为真,则继续重新执行代码块...如此循环,直到条件表达式的值为假(False),才终止循环。执行流程如下图所示:

如打印10以内的所有偶数就可以使用while循环,代码如下:

# 循环的初始化条件
num = 1
# 当 num 小于10时,会一直执行循环体
while num < 10 :if num%2==0 :print("num=", num)else:print("*****")# 迭代语句num += 1
print("循环结束!")

效果:

*****
num= 2
*****
num= 4
*****
num= 6
*****
num= 8
*****
循环结束!

注意,在使用while循环时,一定要保证循环条件有变成假的时候,否则这个循环将成为一个死循环。所谓死循环,指的是无法结束循环的循环结构,例如将上面while循环中的num+=1代码注释掉,再运行程序你会发现,Python解释器一直在输出"*****",永远不会结束(因为num<10一直为True),除非我们强制关闭解释器:

除此之外,while循环还常用来遍历列表、元组和字符串,因为它们都支持通过下标索引获取指定位置的元素。
代码示例:

#遍历字符串
my_char="python"
i = 0
while i<len(my_char):print(f"my_char[{i}]:",my_char[i])i = i + 1
#遍历列表和元组
test_list = [110,120,119]
i = 0
while i<len(test_list):print(f"test_list[{i}]:",test_list[i])i = i + 1
test_tuple = (66,88,99)
i = 0
while i<len(test_tuple):print(f"test_tuple[{i}]:",test_tuple[i])i = i + 1

效果:

my_char[0]: p
my_char[1]: y
my_char[2]: t
my_char[3]: h
my_char[4]: o
my_char[5]: n
test_list[0]: 110
test_list[1]: 120
test_list[2]: 119
test_tuple[0]: 66
test_tuple[1]: 88
test_tuple[2]: 99

至此,有关Python的流程控制语句所有内容内容就讲解完毕了,下一篇我们继续来学习字符串的高级应用。

参考:尚硅谷Python爬虫教程小白零基础速通教学视频

转载请注明出处:https://blog.csdn.net/acmman/article/details/129349447

相关文章:

【Python从入门到进阶】10、流程控制语句-循环语句(for-while)

接上篇《9、流程控制语句-条件语句(if-else)》 上一篇我们学习了Python的控制流语句的概念&#xff0c;以及其中的条件语句(if/else)&#xff0c;本篇我们来学习控制流语句中的循环语句(for/while)。 一、Python中的循环 Python的循环结构就是让程序“杀个回马枪”&#xff0…...

超全的命令(代码)执行漏洞无回显的姿势总结(附带详细代码和测试分析过程)

目录 漏洞代码 突破方式 重定向 dnslog外部通信 burpsuite burpcollaborator外部通信 日志监听 netcat监听 反弹shell的各种姿势 漏洞代码 <?php shell_exec($_GET[a]); ?>这里使用了无回显的shell执行函数shell_exec&#xff0c;给html目录的权限是777 突破方…...

STM32MP157-Linux音频应用编程-简易语音助手

文章目录前言STM32MP157简易语音助手alsa-lib简介&#xff1a;移植alsa-lib库&#xff1a;libcurl库简介&#xff1a;移植libcurl库&#xff1a;API调用修改asrmain.c文件修改token.c文件录音文件IO打开音频文件硬件控制sysfs文件系统数据解析和控制多线程主循环实现效果及注意…...

Python-OpenCV图像处理:学习图像算术运算,如加减法、图像混合、按位运算,以及如何实现它们

目录 目标 图像添加 图像混合算法 按位运算 目标 学习对图像的几种算术运算,如加法、减法、位运算等。了解这些功能:cv.add()、...

并发编程——ReentrantLock

如果有兴趣了解更多相关内容&#xff0c;欢迎来我的个人网站看看&#xff1a;耶瞳空间 一&#xff1a;基本介绍 从Java 5开始&#xff0c;引入了一个高级的处理并发的java.util.concurrent包&#xff0c;它提供了大量更高级的并发功能&#xff0c;能大大简化多线程程序的编写…...

English Learning - L2 第 3 次小组纠音 [ʌ] [ɒ] [ʊ] [ɪ] [ə] [e] 2023.3.4 周六

English Learning - L2 第 3 次小组纠音 [ʌ] [ɒ] [ʊ] [ɪ] [ə] [e] 2023.3.4 周六共性问题小元音 [ʌ]小元音 [ɒ]小元音 [ʊ]小元音 [ɪ]小元音 [ə]小元音 [e]我的发音问题纠音过程共性问题 小元音 [ʌ] 口型容易偏大 解决办法&#xff1a;因为嘴角没有放松&#xff0c…...

STM32之关门狗

看门狗介绍在由单片机构成的微型计算机系统中&#xff0c;由于单片机的工作常常会受到来自外界电磁场的干扰&#xff0c;造成程序的跑飞&#xff0c;而陷入死循环&#xff0c;程序的正常运行被打断&#xff0c;由单片机控制的系统无法继续工作&#xff0c;会造成整个系统的陷入…...

Apollo控制部分1-- ControlComponent组件介绍

Apollo控制部分1-- ControlComponent组件介绍摘要一、ControlComponent1、启动文件解析2、ControlComponent()组件函数解析1&#xff09;ControlComponent::ControlComponent() 构造函数2&#xff09;ControlComponent::Init() 初始化函数&#xff08;执行一次&#xff09;3&am…...

0626-0631韩顺平Java Buffered字节处理流 学习笔记

如何去构建字节流package com.hspedu.outputstream_;import java.io.*;/*** author abner* version 1.0*/ public class BufferedCopy02 {public static void main(String[] args) {String srcFilePath "D:\\Users\\Pictures\\Camera Roll\\Pierre-Auguste_Renoir,_Le_Mo…...

【网络】序列化和反序列化

&#x1f941;作者&#xff1a; 华丞臧. &#x1f4d5;​​​​专栏&#xff1a;【网络】 各位读者老爷如果觉得博主写的不错&#xff0c;请诸位多多支持(点赞收藏关注)。如果有错误的地方&#xff0c;欢迎在评论区指出。 推荐一款刷题网站 &#x1f449; LeetCode刷题网站 文章…...

【代码随想录训练营】【Day32】第八章|贪心算法|122.买卖股票的最佳时机II |55. 跳跃游戏|45.跳跃游戏II

买卖股票的最佳时机II 题目详细&#xff1a;LeetCode.122 买卖股票的最佳时机&#xff0c;怎么都能够想出来个思路&#xff0c;假如我们每天都能预知明天的股票是涨是降&#xff0c;那么贪心策略就是在涨之前买股票&#xff0c;在降的前一天卖掉&#xff0c;这就是买卖股票的…...

constexpr 和 常量表达式

&#x1f440;&#x1f440;常量表达式 常量表达式是指值不会改变并且在编译过程就能得到计算结果的表达式。 字面值属于常量表达式&#xff0c;用常量表达式初始化的const对象也是常量表达式。 那么是什么来就决定是不是常量表达式呢&#xff1f;一个对象是不是常量表达式主要…...

Vue响应式原理————Object.defineProperty()和proxy的用法分享

Vue框架一个比较核心的功能就是我们的数据是响应式的&#xff0c;这样我们在修改数据的时候&#xff0c;页面会自动帮我们更新&#xff0c;那么想要实现这个功能就要实现对一个数据的劫持&#xff0c;即在取值和设置值的同时我们能够检测到即数据劫持。vue2响应式的实现原理所依…...

CSDN 编程竞赛三十四期题解

竞赛总览 CSDN 编程竞赛三十四期&#xff1a;比赛详情 (csdn.net) 本期的题目和第三十一期竞赛的题目竟然高度重合&#xff0c;真不知道该写点什么了。 不过&#xff0c;上次那道测试数据有bug的题已经修复了&#xff0c;答题过程挺顺利的&#xff0c;没有遇到新的问题。 竞…...

C#教程06 运算符

文章目录 一、算术运算符加法运算符(+)减法运算符(-)乘法运算符(*)除法运算符(/)二、逻辑运算符与运算符(&&)或运算符(||)非运算符(!)三、比较运算符等于运算符(==)大于运算符(>)小于运算符(<)大于等于运算符(>=)小于等于运算符(<=…...

软测入门(六)pytest单元测试

pytest pytest是python的一种单元测试框架&#xff0c;同自带的unit test测试框架类似&#xff0c;但pytest更简洁高效。 单元测试&#xff1a; 测试 函数、类、方法能不能正常运行测试的结果是否符合我们的预期结果 安装 pip install -U pytest基本使用 通过pytest包使用…...

经典分类模型回顾5—DenseNet实现图像分类(matlab)

DenseNet&#xff0c;全称为Densely Connected Convolutional Networks&#xff0c;中文名为密集连接卷积网络&#xff0c;是由李沐等人在2017年提出的一种深度神经网络架构。 DenseNet旨在解决深度神经网络中的梯度消失问题和参数数量过多的问题&#xff0c;通过构建密集连接…...

基于flask+bootstrap+echarts+mysql的鱼村小馆订餐后台管理系统

&#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是阿牛&#xff0c;全栈领域优质创作者。&#x1f61c;&#x1f4dd; 个人主页&#xff1a;馆主阿牛&#x1f525;&#x1f389; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4d…...

Spark使用Log4j将日志发送到Kafka

文章目录自定义KafkaAppender修改log4j.properties配置启动命令配置添加参数启动之后可以在Kafka中查询发送数据时区问题-自定义实现JSONLayout解决自定义JSONLayout.java一键应用可能遇到的异常ClassNotFoundException: xxx.KafkaLog4jAppenderUnexpected problem occured dur…...

c++类与对象整理(上)

目录 1.类的引入 2.类的定义 3.类的访问限定符及封装 1&#xff09;访问限定符 2&#xff09;封装 4.类的作用域 5.类的实例化 6.类的对象大小的计算 1&#xff09;类对象的存储方式 2&#xff09;内存对齐和大小计算 ​编辑 7.类成员函数的this指针 1&#xff09…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 &#x1f3af; 今日目标 理解类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;的关系学会定义类的属性、方法和构造函数&#xff08;init&#xff09;掌握对象的创建与使用初识封装、继承和多态的基本概念&#xff08;预告&#xff09; &a…...