Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Python】Python中的循环语句

【Python】Python中的循环语句

作者头像
蒙奇D索隆
发布于 2024-09-07 09:31:38
发布于 2024-09-07 09:31:38
37600
代码可运行
举报
运行总次数:0
代码可运行

循环语句

导读

大家好,很高兴又和大家见面啦!!!

在上一篇内容中我们介绍了条件语句的相关内容,我们先简单的回顾一下:

在Python中有两种条件语句——if语句和match……case语句。其中if语句是由关键字if、elif、else引导的特定语句块,而match……case是在Python 3.10之后新增的一种条件语句,并且match与case并不是Python中的关键字,也就是说我们在没有使用match……case语法结构时,是可以定义重名的变量的。

在if语句中有三种形式的分支语句:

  1. 单分支语句——由if引导的条件语句,其语法格式为:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if True:  # True代表的是语句中的判断语句
    pass  # pass——空语句,代表的是if语句块中的语句
  1. 双分支语句——由if……else引导的条件语句,其语法格式为:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if True:  # if后带有判断语句
    pass
else:  # else后不带判断语句
    pass
  1. 多分支语句——由if……elif……else引导的条件语句,其语法格式为:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if 1:
    pass
elif 2:  # elif可以存在多个
    pass
else:
    pass

if条件语句还有两种使用方式:

  1. if嵌套使用,嵌套格式如下所示:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if True: 
    if True:  # 在if语句的任一分支中都能继续使用if语句
        # ……
        pass
    else:
        pass
    pass
else:
    pass
pass
  1. 省略else,在两种情况下可以省略else语句:
  • 不需要借助else语句的判断逻辑,可以省略else,其语法结构如下:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 双分支或多分支语句中不需要使用else的判断逻辑时可以省略else
if True:
    pass
pass  # 双分支语句省略else变为单分支语句

if 1:
    pass
elif 2:
    pass
pass  # 三分支语句省略else变为双分支语句
  • if、elif语句中存在转向语句的情况,可以省略else,其语法结构如下:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def ignoreElse():
    # 在函数中if、elif分支中存在转向语句return,可以省略else
    if True:
        return True
    return False

while True:
    # 在循环语句中,if、elif分支中存在转向语句breakcontinue,可以省略else
    if 1:
        continue
    elif 2:
        break
    pass

match……case语句的用法与C/C++中的开关语句(Switch语句)的使用方式一致,通过match作为语句的引导词,case作为语句中各分支的引导词,其语法格式如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a = 1
match a + 1:  # match 引导词后跟一个表达式
    case 1:  # case 引导词后可以跟常量、变量、函数、通配符等
        pass  # case 语句块中的内容都是独立的语句块
    case 2:
        pass
    case _:  # 通配符_ 可以指代一切内容,相当于default
        pass

但是match……case语句要比Switch语句的功能强大:

  1. Switch引导词后只能跟一个整型表达式,而match引导词后可以跟一个任一类型的表达式
  2. Switch语句中case引导词后只能跟整型常量表达式,而match语句中case引导词后可以跟常量、变量、函数……
  3. Switch语句中case分支是连通的需要借助break将分支给独立出来,match语句中case分支是相互独立的

复习完了Python中的分支语句的内容,下面我们来看一下Python中的第二类控制语句——循环语句,

一、基本概念

循环语句指的是能够重复执行同一件事情的语句,是循环结构的具体体现。

1.1 循环语句的执行流程

循环语句的执行流程如下所示:

【Python】Python中的循环语句_Python_02
【Python】Python中的循环语句_Python_02

在循环语句中循环体中可以是空语句,但是下面三条语句是一个循环语句中必不可少的内容:

  • 循环对象语句——在循环语句中参与循环的对象
  • 循环判断语句——通过判断语句的值来决定是否进入循环
  • 循环递进语句——循环对象通过递进语句逐渐向循环的结束条件靠近

1.2 循环语句的分类

C/C++中有三种循环语句——while循环语句、for循环语句以及do……while循环语句除了这三种循环语句外我们还可以通过goto语句来实现循环;

但是在Python中,只存在两种形式的循环语句——while循环语句和for循环语句。Python中的循环语句与C/C++中所对应的while循环语句与for循环语句有相同点也有不同点,接下来我们就分别来看一下这两种语言中的while语句与for语句之间的差异;

二、while语句

在C/C++中while语句的语法结构如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int i = 1;//循环对象语句
	while (i != 100) {
		//while——语句引导词
		//i != 100——循环判断语句
		printf("%d\n", i);//循环体语句——循环语句需要执行的具体内容,可以为空语句
		i++;//循环递进语句——对象语句根据递进语句逐渐靠近循环的介绍条件
	}

在Python中while语句的语法结构与该结构相似,但还是会有些许区别:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
i = 1  # 循环对象语句
while i != 100:
    # while——语句引导词
    # i != 100——循环判断语句
    print(i)  # 循环体语句——循环语句中需要执行的具体内容
    i += 1  # 循环递进语句——循环对象根据递进语句逐渐靠近循环的介绍条件

while语句的语法结构在两种语言中唯一的不同在于判断语句的表示,在C/C++中,判断语句会通过圆括号'()'括起来,但是在Python中,判断语句则是通过冒号':'来表示判断语句的结束。

需要注意的是,在C/C++中如果递进语句是逐个递进,那我们可以通过前置'++'/'--'或者后置'++'/'--'来完成语句的递进,但是在Python中舍弃了这类操作符,在自增自减的递进语句中,可以通过赋值运算符来实现自增自减的操作。

while语句是循环语句的最基础的一种语法,语法的使用上也比较简单,这里就不再继续赘述,下面我们继续来看一下for语句在两种语言中的异同点;

三、for语句

while语句中,语句的循环对象位于语句的外部,循环递进语句则位于循环体中,它们三者在位置上呈现的是一种上下关系,这样就容易出现一种情况——当循环对象语句与while引导词中间的语句内容过多或者循环体中的语句比较多时,导致循环对象语句、判断语句以及循环递进语句间隔太远。

在这种情况下如果在循环语句中出现问题时,我们想要修改这三者中的其中之一,则会需要花费大量的时间去一一寻找这三条语句。因此如果我们在编写循环语句时,需要尽可能的让这三条语句靠近一些。

在计算机语言中,for循环语句就很好的弥补了while语句中的这个问题,下面我们先来看一下C/C++中的for语句的语法结构,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for (int i = 1; i != 100; i++) {
		printf("%d\n", i);
	}

可以看到,在C/C++的for语句中,循环对象语句、循环判断语句、循环递进语句都位于引导词for后面的圆括号内'()',这样就能在我们需要修改这三者中的任一一条语句时,就能通过循环语句引导词for很轻松的找到这三条语句。

在Python中,for语句的语法结构与C/C++的for语句的语法结构有很大的不同,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for i in range(1, 101):
    print(i)
# i——循环对象
# in——成员运算符
# range()——可迭代对象,也可以是字符串、元组、列表……

在Python中,for循环语句的判断语句与递进语句都被整合到了可迭代对象中。可迭代对象指的是一种特殊的变量~内部包含了很多其他的值。循环体在执行时,可以通过成员运算符'in'将可迭代对象中的值一个一个的取出来并存放在循环对象变量中。

这里展示的可迭代对象range(),是一个可以依次获取参数区间内整数的内建函数,该函数的区间为前闭后开区间,也就是说对于区间1~101我们通过成员运算符'in'可以从函数中获取到的内容为1~100的所有整数。

在循环语句中我们还可以通过转向语句来控制循环体语句的执行逻辑,在C/C++中循环体中的转向语句有两种——breakcontinue,在Python中,这两种转向语句同样适用,下面我们就来看一下Python中的breakcontinue的用法

四、break与continue

在循环语句中,break可以用来立即结束循环并跳出循环,continue可以用来立即结束当前循环开始进入下一次循环,具体用法如下所示:

【Python】Python中的循环语句_if语句_03
【Python】Python中的循环语句_if语句_03

从测试中可以看到,通过for循环语句我们完成了从1到100 的打印,当在循环中加入breakcontinue之后,循环的执行逻辑发生了变化:

  • i == 10 时,第一个if语句能够正常执行,也就是说此时循环体中执行的是转向与continue,可以看到continue后的print语句并没有执行,而是直接进入了下一次循环打印i == 11
  • i == 20 时,在完成打印后,第二个if语句能够正常执行,也就是说此时循环体中执行的是转向语句break,可以看到在执行完break后,循环并未继续执行,而是执行了循环外的print语句;

这个例子很好的说明了这两个转向语句在循环中的用法:

  • continue——用于结束当前循环,continue后的语句不再执行,程序立即进入下一次循环
  • break——用于结束循环,程序直接跳出循环,执行循环外的语句

五、死循环

死循环也就是无线循环——循环无法停止,会一直运行。当我们在写程序时,最怕的就是遇到死循环,会导致死循环的原因主要有以下几点:

  1. 判断语句的值永远为真
  2. 缺少递进语句导致判断语句恒成立
  3. 递进语句的递进方向错误,导致循环对象逐渐远离循环的结束条件

下面我们通过一个最简单的死循环来认识什么是死循环:

【Python】Python中的循环语句_循环语句_04
【Python】Python中的循环语句_循环语句_04

可以看到此时程序已经运行到了i==1622878任然未停止运行,之所以无法停止,正是因为在该循环中判断条件一直成立,且循环体内没有转向语句break来结束循环,因此循环进入了死循环。

那是不是说所有的死循环都是不合理的呢?

实际上并不是这样,比如一款游戏的运行,当我们在结束一句游戏后,如果游戏就直接退出了,那我们想要开启下一句游戏,只能够重新启动该游戏,显然这种设计是不合理的,因此我们就可以设置死循环,并通过转向语句来控制循环的结局,如下所示:

【Python】Python中的循环语句_循环语句_05
【Python】Python中的循环语句_循环语句_05

可以看到,同样的代码,当我们在循环体中添加了转向语句后循环变不再是死循环了。

设想一下,如果我们是将条件语句的判断条件改为输入某个值,或者检测键盘按下了某个按键,或者鼠标点击了某个按键,才会执行转向语句,这样我们是不是就能够保证即使一局游戏结束后,不会第一时间退出程序,而是会继续运行了。

因此合理的利用死循环和转向语句,能够帮助我们实现更多的操作。

六、循环中的else语句

在Python中对于循环语句而言,新增了一个语法——else语句:

  • while……else语句
  • for……else语句

这种语法就是在双分支语句的基础上将if语句替换成了循环语句,如下所示:

【Python】Python中的循环语句_Python_06
【Python】Python中的循环语句_Python_06

看到这里,有朋友就会好奇了,这跟不加else有什么区别?不一样的都是在不满足循环条件时运行循环体外的语句吗?

如果我们只是看这个测试代码,确实,循环语句后加一个else语句与不加else语句并无区别,但是当我们在循环体中加入了转向语句后,我们就能知道他们的区别在哪里了,如下所示:

【Python】Python中的循环语句_循环语句_07
【Python】Python中的循环语句_循环语句_07

从测试结果中大家应该能够明白在循环语句后加了else语句与不加else语句的区别了。

循环……else语句就像双分支条件语句一样,它们是一个整体,对于转向语句breakcontinue而言,它们的作用是用来结束循环语句,因此,当循环体中出现转向语句时,会直接结束整个循环,包括else语句。

下面我们通过一个例子来说明该语法的运用场景:

【Python】Python中的循环语句_Python_08
【Python】Python中的循环语句_Python_08

可以看到实现同样功能的代码,第一次加了else,第二次没有加else,但是输出的结果却不相同,第二次比第一次多输出了一行信息。

导致这种错误的原因是因为对于该功能而言,我们在实际的运行中只会尝试两种结果——是质数与不是质数,也就是说这两种判断结果我们只需要输出其中之一。

  • 当我们通过else语句来控制时,能完美的实现二者输出其一的操作;
  • 但是当我们不加else时,第二个print语句属于第一层循环的循环体中的内容,因此第二层循环的循环体中的break语句无法对其生效,所以会导致进行重复输出的情况。

也就是说这种语法结构比较适合需要根据判断条件进行不同输出的结果,并且其中一种判断条件需要通过循环来实现。

七、range()函数

range()函数作为Python中的内置函数,它的作用是生成一组数字序列,并将其以可迭代的对象进行返回,其返回值的类型为对象类型。该函数语法如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
range(stop)
range(start, stop[, step])

函数中的参数的含义依次为:

  • start: 计数从 start 开始。默认是从 0 开始。例如 range(5) 等价于 range(0, 5)
  • stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是 [0, 1, 2, 3, 4] 没有 5
  • step:步长,默认为 1。例如:range(0, 5) 等价于 range(0, 5, 1)

这里我们需要了解的是函数的第三个参数——步长(step)。

所谓的步长,我们可以理解为对象语句递进的方式,函数默认的步长为1,其对象语句会依次增加1,当步长为n时,其对象语句依次增加n,如下所示:

【Python】Python中的循环语句_if语句_09
【Python】Python中的循环语句_if语句_09

下面我们来简单总结一下range函数的用法:

  • range函数可以用于生成一组数字序列,并将其作为可迭代对象返回,返回值的类型为对象类型;
  • range中的三个参数分别是序列开始值、序列结束值以及序列步长;
  • 开始值默认为0,序列步长默认为1
  • 当步长为负数时,传入的序列开始值需要大于结束值

结语

今天的内容到这里就全部结束了,在下一篇内容中我们将介绍《Python中的函数》,大家记得关注哦!如果大家喜欢博主的内容,可以点赞、收藏加评论支持一下博主,当然也可以将博主的内容转发给你身边需要的朋友。最后感谢各位朋友的支持,咱们下一篇再见!!!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一款比Typora更简洁优雅的Markdown编辑器神器(完全开源免费)
自从Typora收费以后经常有朋友会问有没有一个好用、简洁、免费的Markdown编辑器推荐的,今天大姚给大家分享一款比Typora更简洁优雅的、完全开源免费(MIT License)Markdown编辑器神器:MarkText。
追逐时光者
2024/03/31
1.7K0
一款比Typora更简洁优雅的Markdown编辑器神器(完全开源免费)
几款主流好用的markdown编辑器介绍
这些Markdown编辑器都有各自的特点和优势,用户可以根据自己的需求选择适合自己的编辑器。
正在走向自律
2024/12/18
1.2K0
十大markdown编辑器
如果你没有听过markdown这个词,那么我只能说你可能在互联网这个领域有些落伍,因为这是和html一样同样的标记语言,使用它可以让你用纯文本的形式写出适合各个格式的文档。你可以非常容易的将.md文件导出为html,word,pdf,epub等多种格式。
程序那些事儿
2023/03/07
1.8K0
十大markdown编辑器
Typora for Mac(Markdown文本编辑器)
是一款非常受欢迎的Markdown文本编辑器,编辑功能齐全,支持中文界面,可以非常直观的看到源部分和预览部分,支持插入文本、图片、表格、代码、数学公式等,Typora mac版还支持实时预览和所见即所得功能,让你工作更加高效。可读写
Mac小小心
2023/03/30
3510
Typora for Mac(Markdown文本编辑器)
几款主流好用的 Markdown 编辑器!值得拥有
Markdown 其实在 2004 年就有了,不过之前一直很小众,这几年随着相关应用平台的发展,Markdown以其独到的优势迅速火起来了。Markdown编辑器使用一套格式标记语言来对文档内容进行排版和格式显示。而Markdown的标记很少,常用的也就十个左右,它是一种非常轻量的标记语言。
终码一生
2022/04/15
6.8K0
几款主流好用的 Markdown 编辑器!值得拥有
几款主流并且好用的 Markdown 编辑器一览
Markdown 编辑器数不胜数,其中有非常漂亮简洁的,也有简易到只剩下原生 Markdown 语法的,这篇文章我将介绍一下我个人感觉比较优秀的几款 Markdown 编辑器。 Markdown 是一种轻量级标记语言。后缀名为 .md 或 .markdown。它允许人们使用易读易写的纯文本格式编写文档。并且它对于图片,图表、数学公式都有支持,许多网站都广泛使用 Markdown 来撰写帮助文档或是用于论坛上发表消息。 如 GitHub、Reddit、Diaspora、SourceForge、CSDN 等,甚至还能被使用来撰写电子书,如 Gitbook。
Skykguj
2022/09/09
2.4K0
几款主流并且好用的 Markdown 编辑器一览
Typora for Mac(文本编辑器)
Typora mac是一款极致简洁的文本编辑器,具有简洁,跨平台,所见即所得的特点,支持Markdown语法,可以插入数学公式、表情、图标等,功能强大!
用户10121095
2023/02/10
1K0
再见 Typora !这款开源的 Markdown 神器界面更炫酷,逼格更高!
MarkText号称下一代Markdown编辑器,是一款简单易用的开源编辑器,支持Linux、MacOS和Windows系统。MarkText在Github上已经有26.9k+Star,可见其是非常流行的!
macrozheng
2022/02/23
1.6K0
再见 Typora !这款开源的 Markdown 神器界面更炫酷,逼格更高!
免费、好用、强大的 Markdown 编辑器综合评测和推荐
如今,在编辑器领域,Markdown 大行其道。那么,如何使用 Markdown 语法呢?又如何选择合适的 Markdown 编辑器呢?
数字花园
2022/06/28
6.5K0
免费、好用、强大的 Markdown 编辑器综合评测和推荐
【Typora】markdown神器之Typora无限使用安装与基本操作教程
关闭Typora软件,打开安装Typora的对应目录(比如我的是E:\Download\Typora)
SarPro
2024/02/20
4780
【Typora】markdown神器之Typora无限使用安装与基本操作教程
MarkEdit:相信做技术的同学都会喜欢这个编辑器的,MarkEdit编辑器,让Markdown编辑变得简单而强大,超赞~~~
嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法
小华同学ai
2025/02/02
3841
MarkEdit:相信做技术的同学都会喜欢这个编辑器的,MarkEdit编辑器,让Markdown编辑变得简单而强大,超赞~~~
Typora for Mac(Markdown文本编辑器)
Typora是一款跨平台的Markdown编辑器,支持Windows、MacOS和Linux操作系统。它具有实时预览功能,能够自动将Markdown文本转换为漂亮的排版效果,让用户专注于写作内容而不必关心格式调整。Typora Mac版除了支持常见的Markdown语法外,还提供了许多实用功能,如:支持图片、表格、数学公式等丰富的Markdown扩展语法。编辑器与预览窗口无缝切换,支持全屏模式。可以导出为多种格式,包括HTML、PDF、Word、LaTeX等。支持多种主题和字体样式,用户可以根据喜好进行设置。内置文件管理器,方便用户管理和查找文档。支持文本搜索、替换和自定义快捷键等功能。
用户10121095
2023/04/17
6980
16 个 Linux 最佳 Markdown 编辑器(2)
对于初学者来说,Markdown 是一个用 Perl 编写的简单且轻量级的工具,它使用户能够编写纯文本格式并将其转换为有效的 HTML(或 XHTML)。它是一种易于阅读、易于编写的纯文本语言,也是一种用于文本到 HTML 转换的软件工具。
数据科学工厂
2023/10/22
6270
16 个 Linux 最佳 Markdown 编辑器(2)
MarkText, 比肩Typora的开源markdown编辑器
对于很多程序员或写文作的人来说, 一定知道Markdown这种格式. 使用Markdown来编写文章非常方便, 优雅. 让你专注于内容, 而不用纠结格式.
御剑
2024/02/06
4520
MarkText, 比肩Typora的开源markdown编辑器
猫头虎分享几款主流好用的markdown编辑器:简介,优缺点分析,值得推荐
今天,猫头虎博主要带领大家深入了解Markdown编辑器,从基本介绍到深入分析几款主流和值得推荐的编辑器。不论你是编程新手或是资深开发者,本文将帮助你找到最适合你的Markdown编辑器。我们将围绕易用性、跨平台特性、实时预览等关键SEO词条展开,旨在提供一个既准确又易读的技术博客文章。
猫头虎
2024/04/07
2.6K0
Typora-轻量级MD编辑器-官方免费版
markdown是一种轻量级标记语言,轻量级标记语言是一类用简单句法描述简单格式的文本语言,它的语法简单,可方便地使用简单的文本编辑器输入,原生格式接近自然语言。所谓“轻量级”是相对于其他更丰富格式的标记语言而言的。
张旭博客
2022/12/27
1.4K0
Typora-轻量级MD编辑器-官方免费版
Typora for Mac(Markdown文本编辑器)v1.5.8中文版
这是一款非常受欢迎的Markdown文本编辑器,编辑功能齐全,支持中文界面,可以非常直观的看到源部分和预览部分,支持插入文本、图片、表格、代码、数学公式等,Typora mac版还支持实时预览和所见即所得功能,让你工作更加高效。
小草莓
2023/02/14
5450
Typora for Mac(Markdown文本编辑器)v1.5.8中文版
Typora for Mac(文本编辑器)
Typora是一款非常受欢迎的Markdown文本编辑器,编辑功能齐全,支持中文界面,可以非常直观的看到源部分和预览部分,支持插入文本、图片、表格、代码、数学公式等,Typora mac版还支持实时预览和所见即所得功能,让你工作更加高效。Typora将为您提供读者和作家的无缝体验。它删除了预览窗口,模式切换器,降价源代码的语法符号以及所有其他不必要的干扰。将它们替换为真实的实时预览功能,以帮助您专注于内容本身。是一款非常强大的编辑文本的Mac软件。
Mac小小心
2023/03/23
7820
Typora for Mac(文本编辑器)
Typora for Mac(文本编辑器) 1.5.6中文版
Typora mac是一款极致简洁的文本编辑器,具有简洁,跨平台,所见即所得的特点,支持Markdown语法,可以插入数学公式、表情、图标等,功能强大!
一小朵
2023/02/10
9390
Typora for Mac(文本编辑器) 1.5.6中文版
最好用的 Markdown 编辑器
Markdown ,相信没有人不知道了吧,这里不多介绍了。如果还没听过,强烈建议百度一下,五分钟即可上手,包你会了之后就不想zai用 Office Word 写文档了。
用户3596197
2018/10/15
1.6K0
推荐阅读
相关推荐
一款比Typora更简洁优雅的Markdown编辑器神器(完全开源免费)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验