【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的控制流语句的概念,以及其中的条件语句(if/else),本篇我们来学习控制流语句中的循环语句(for/while)。 一、Python中的循环 Python的循环结构就是让程序“杀个回马枪”࿰…...
超全的命令(代码)执行漏洞无回显的姿势总结(附带详细代码和测试分析过程)
目录 漏洞代码 突破方式 重定向 dnslog外部通信 burpsuite burpcollaborator外部通信 日志监听 netcat监听 反弹shell的各种姿势 漏洞代码 <?php shell_exec($_GET[a]); ?>这里使用了无回显的shell执行函数shell_exec,给html目录的权限是777 突破方…...
STM32MP157-Linux音频应用编程-简易语音助手
文章目录前言STM32MP157简易语音助手alsa-lib简介:移植alsa-lib库:libcurl库简介:移植libcurl库:API调用修改asrmain.c文件修改token.c文件录音文件IO打开音频文件硬件控制sysfs文件系统数据解析和控制多线程主循环实现效果及注意…...
Python-OpenCV图像处理:学习图像算术运算,如加减法、图像混合、按位运算,以及如何实现它们
目录 目标 图像添加 图像混合算法 按位运算 目标 学习对图像的几种算术运算,如加法、减法、位运算等。了解这些功能:cv.add()、...
并发编程——ReentrantLock
如果有兴趣了解更多相关内容,欢迎来我的个人网站看看:耶瞳空间 一:基本介绍 从Java 5开始,引入了一个高级的处理并发的java.util.concurrent包,它提供了大量更高级的并发功能,能大大简化多线程程序的编写…...
English Learning - L2 第 3 次小组纠音 [ʌ] [ɒ] [ʊ] [ɪ] [ə] [e] 2023.3.4 周六
English Learning - L2 第 3 次小组纠音 [ʌ] [ɒ] [ʊ] [ɪ] [ə] [e] 2023.3.4 周六共性问题小元音 [ʌ]小元音 [ɒ]小元音 [ʊ]小元音 [ɪ]小元音 [ə]小元音 [e]我的发音问题纠音过程共性问题 小元音 [ʌ] 口型容易偏大 解决办法:因为嘴角没有放松,…...
STM32之关门狗
看门狗介绍在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入…...
Apollo控制部分1-- ControlComponent组件介绍
Apollo控制部分1-- ControlComponent组件介绍摘要一、ControlComponent1、启动文件解析2、ControlComponent()组件函数解析1)ControlComponent::ControlComponent() 构造函数2)ControlComponent::Init() 初始化函数(执行一次)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…...
【网络】序列化和反序列化
🥁作者: 华丞臧. 📕专栏:【网络】 各位读者老爷如果觉得博主写的不错,请诸位多多支持(点赞收藏关注)。如果有错误的地方,欢迎在评论区指出。 推荐一款刷题网站 👉 LeetCode刷题网站 文章…...
【代码随想录训练营】【Day32】第八章|贪心算法|122.买卖股票的最佳时机II |55. 跳跃游戏|45.跳跃游戏II
买卖股票的最佳时机II 题目详细:LeetCode.122 买卖股票的最佳时机,怎么都能够想出来个思路,假如我们每天都能预知明天的股票是涨是降,那么贪心策略就是在涨之前买股票,在降的前一天卖掉,这就是买卖股票的…...
constexpr 和 常量表达式
👀👀常量表达式 常量表达式是指值不会改变并且在编译过程就能得到计算结果的表达式。 字面值属于常量表达式,用常量表达式初始化的const对象也是常量表达式。 那么是什么来就决定是不是常量表达式呢?一个对象是不是常量表达式主要…...
Vue响应式原理————Object.defineProperty()和proxy的用法分享
Vue框架一个比较核心的功能就是我们的数据是响应式的,这样我们在修改数据的时候,页面会自动帮我们更新,那么想要实现这个功能就要实现对一个数据的劫持,即在取值和设置值的同时我们能够检测到即数据劫持。vue2响应式的实现原理所依…...
CSDN 编程竞赛三十四期题解
竞赛总览 CSDN 编程竞赛三十四期:比赛详情 (csdn.net) 本期的题目和第三十一期竞赛的题目竟然高度重合,真不知道该写点什么了。 不过,上次那道测试数据有bug的题已经修复了,答题过程挺顺利的,没有遇到新的问题。 竞…...
C#教程06 运算符
文章目录 一、算术运算符加法运算符(+)减法运算符(-)乘法运算符(*)除法运算符(/)二、逻辑运算符与运算符(&&)或运算符(||)非运算符(!)三、比较运算符等于运算符(==)大于运算符(>)小于运算符(<)大于等于运算符(>=)小于等于运算符(<=…...
软测入门(六)pytest单元测试
pytest pytest是python的一种单元测试框架,同自带的unit test测试框架类似,但pytest更简洁高效。 单元测试: 测试 函数、类、方法能不能正常运行测试的结果是否符合我们的预期结果 安装 pip install -U pytest基本使用 通过pytest包使用…...
经典分类模型回顾5—DenseNet实现图像分类(matlab)
DenseNet,全称为Densely Connected Convolutional Networks,中文名为密集连接卷积网络,是由李沐等人在2017年提出的一种深度神经网络架构。 DenseNet旨在解决深度神经网络中的梯度消失问题和参数数量过多的问题,通过构建密集连接…...
基于flask+bootstrap+echarts+mysql的鱼村小馆订餐后台管理系统
📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言Ὅ…...
Spark使用Log4j将日志发送到Kafka
文章目录自定义KafkaAppender修改log4j.properties配置启动命令配置添加参数启动之后可以在Kafka中查询发送数据时区问题-自定义实现JSONLayout解决自定义JSONLayout.java一键应用可能遇到的异常ClassNotFoundException: xxx.KafkaLog4jAppenderUnexpected problem occured dur…...
c++类与对象整理(上)
目录 1.类的引入 2.类的定义 3.类的访问限定符及封装 1)访问限定符 2)封装 4.类的作用域 5.类的实例化 6.类的对象大小的计算 1)类对象的存储方式 2)内存对齐和大小计算 编辑 7.类成员函数的this指针 1)…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
