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

news2024/12/24 3:39:56

接上篇《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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/390037.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

修复电子管

年前在咸鱼捡漏买到了10根1G4G电子管&#xff0c;这是一种直热三极管&#xff0c;非常的少见。买回来的时候所有的灯丝都是通的&#xff0c;卖家说都是新的&#xff0c;库存货&#xff0c;但是外观实在是太糟糕了&#xff0c;看着就像被埋在垃圾场埋了几十年的那种&#xff0c;…

ECharts可视化库--常用组件

目录 一.series系列 二.常见组件 1.标题title 2.图例legend 3.工具栏toolbox 4.提示框tooltip 5.坐标轴 xAxis yAsix 6.series系列 上一篇已经介绍了ECharts库的导入工作和绘制基本的图标&#xff0c;今天我们来了解一下常用的组件&#xff0c;如果对数据可视化感兴…

嵌入式安防监控项目——前期知识复习

目录 一、概述 二、C语言 三、数据结构 四、IO进程 五、网络 六、ARM体系结构和接口技术 七、系统移植 八、内核驱动 一、概述 我再报班之前学过51和32&#xff0c;不过都是自学的。报班开始先从应用层入手的&#xff0c;C语言和数据结构。只要是个IT专业的大学这都是必…

【剑指Offer】JZ14--剪绳子

剪绳子详解1.问题描述2.解题思路3.具体实现1.问题描述 2.解题思路 首先想到的思路&#xff1a;因为是求乘积的最大值&#xff0c;所以如果截取剩下的是1&#xff0c;那还是它本身就没有意义。从此出发&#xff0c;考虑绳子长度是2、3、4、5…通过穷举法来找规律。 值–》拆分–…

Keychron K7 Pro 轻薄矮轴机械键盘开箱体验

文章目录1. 拆箱2. 零件3. 外观4. 声音5. 特点5.1 有线 / 无线5.2 RGB背光5.3 轻薄5.4 mac / win / iphone 切换5.5 人体工程学支持5.6 扁平双射PBT键帽5.7 重新设计的稳定器5.8 扁平Gateron(佳达隆)轴体5.9 热插拔5.10 支持 QMK / VIA 改键6. 对比6.1 K7 与 K7 Pro 参数对比6.…

Windows10下使用CMake编译ITK5.2.1步骤

编译环境&#xff1a;Windows10VS2017Cmak3.24.0ITK5.2.1 编译步骤&#xff1a; 1、下载ITK到本地&#xff1a;ITK官网Download | ITK&#xff0c;ITK5.2.1下载地址 https://github.com/InsightSoftwareConsortium/ITK/releases/download/v5.2.1/InsightToolkit-5.2.1.zip ​…

13_pinctrl子系统

总结 pinctrl作为驱动 iomuxc节点在设备树里面 存储全部所需的引脚配置信息 iomux节点匹配pinctrl子系统 控制硬件外设的时候 要知道有哪些gpio 再看gpio有哪些服用寄存器 接着在程序配置gpio相关寄存器 这样搞效率很低 所以用iomux节点保存所有的引脚组 pinctrl驱动起来的时…

Linux(基于 Centos7) 常用操作

1.Linux 简介Linux 是一种 免费使用、自由传播的类 Unix 操作系统Linux操作系统内核&#xff0c;由林纳斯托瓦兹在1991年10月5日首次发布...Linux 是一套开源操作系统&#xff0c;它有稳定、消耗资源小、安全性高等特点大多数人都是直接使用 Linux 发行版&#xff08;就是将 Li…

一文讲明白一致性hash算法

一致性Hash算法常用来解决数据分片时的数据扩容/缩容的性能问题。 一、业内数据分片用的Hash算法&#xff0c;将节点的hash值对节点数取余。 存取通过key / value的方式对节点取余。 二、数据分片使用hash算法的优缺点&#xff1a; 优点&#xff1a;简单&#xff0c;方便。 缺…

【笔记】OpenMPI基本使用1

【笔记】OpenMPI基本使用1 介绍 在 90 年代之前&#xff0c;对不同的计算架构写并发程序是一件困难而且复杂的事情。当时&#xff0c;虽然很多软件库可以帮助写并发程序&#xff0c;但是并没有一个大家都接受的标准。 在当时&#xff0c;大多数的并发程序出现在科学研究领域…

为什么我复制的中文url粘贴出来会是乱码的? 浏览器url编码和解码

为什么我复制的中文url粘贴出来会是乱码的&#xff1f; 浏览器url编码和解码 Start 番茄最近涉及到一些和单点登录相关的业务需求&#xff0c;在实现功能的过程中&#xff0c;难免少不了和 url 打交道。但是在打交道的过程中&#xff0c;遇到一个痛点&#xff1a;明明我复制的…

网络基础(二)之HTTP与HTTPS

应用层 再谈 "协议" 协议是一种 "约定". socket api的接口, 在读写数据时, 都是按 "字符串" 的方式来发送接收的. 如果我们要传输一些"结构化的数据" 怎么办呢? 为什么要转换呢&#xff1f; 如果我们将struct message里面的信息…

【C++】-- 类型转换

目录 前言 C语言中的类型转换 C强制类型转换 static_cast&#xff08;static静止的&#xff09; reinterpret_cast&#xff08;reinterpret重新解释&#xff09; const_cast&#xff08;const常量&#xff09; 总结 dynamic_cast&#xff08;dynamic动态&#xff09; …

JavaWeb开发(三)3.5——Java的反射机制

一、反射机制的概念 指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法&#xff0c;对于任意一个对象&#xff0c;都能调用它的任意一个方法。这种动态获取信息&#xff0c;及动态调用对象方法的功能叫java语言的反射机制。 Java反射机制的核心是在程序运行时动…

Vue3电商项目实战-购物车模块4【11-购物车页面-确认框组件】

文章目录11-购物车页面-确认框组件11-购物车页面-确认框组件 目的&#xff1a;通过vue实例调用$confirm函数弹出确认框。import导入函数使用也需要支持。 大致步骤&#xff1a; 实现组件基础结构和样式。实现函数式调用组件方式和完成交互。加上打开时动画效果。给购物车删除加…

飞鹤奶粉营销杀手级动作,让对手郁闷

飞鹤奶粉杀手级动作&#xff0c;让对手绝望 不是“更适合中国宝宝体质”一句话的事 而是杀手级资源匹配&#xff1a; 飞鹤奶粉一年50万场线下活动 趣讲大白话&#xff1a;让别人无路可走 【安志强趣讲信息科技94期】 ********************************** 战略定位后&#xff0…

多重背包问题中的二进制状态压缩

1.多重背包问题 经典的多重背包问题和01背包问题的相似之处在于二者的一维遍历顺序都是从右侧往左侧遍历。 同时多重背包的一维写法不比二维写法降低时间复杂度。 2.多重背包标准写法:(平铺展开形式&#xff09; class Solution {public int maxValue(int N, int C, int[] s…

Raspbian镜像无头烧录

Raspbian镜像无头烧录1. 源由2. 需求3. 分析4. 步骤4.1 删除tf卡分区内容4.2 balena烧录镜像4.3 配置USB直接登录4.4 配置WiFi 2.4G网络登录4.5 修改登录账号密码4.6 数据同步和弹出tf卡5. 登录5.1 登录异常处理5.2 WiFi 2.4G网络登录5.3 USB直接登录6. 参考资料7. 补充资料这里…

HCIP-5OSPF域内域间外部路由学习笔记

1、OSPF区域 每个区域都维护一个独立的LSDB。 Area 0是骨干区域&#xff0c;其他区域都必须与此区域相连。 划分OSPF区域可以缩小路由器的LSDB规模&#xff0c;减少网络流量。 区域内的详细拓扑信息不向其他区域发送&#xff0c;区域间传递的是抽象的路由信息&#xff0c;而不…

【Flutter·学习实践·UI篇】基础且重要的UI知识

前言 参考学习官网&#xff1a;《Flutter实战第二版》 学习前先记住&#xff1a;Flutter 中万物皆为Widget&#xff0c;心中默念3次以上铭记于心。 这一点和开发语言Dart的变量一切皆是对象的概念&#xff0c;相互对应。 Widget 在前面的介绍中&#xff0c;我们知道在Flutt…