来源:大数据DT
本文约3200字,建议阅读9分钟
循环语句是指重复执行同一段代码块,通常用于遍历集合或者累加计算。Python中的循环语句有while语句、for语句。
01 while循环
循环语句是程序设计中常用的语句之一。任何编程语言都有while循环,Python也不例外。while循环的格式如下所示。
while(表达式): …else: …
while循环的执行过程:当循环表达式为真时,依次执行while中的语句。直到循环表达式的值为False,程序的流程转到else语句。其中else子句可以省略,表达式两侧的括号也可以省略。
注意:while循环中的else子句也属于循环的一部分,最后一次循环结束后将执行else子句。
下面这段代码演示了while循环的使用。程序首先要求输入5个数字,然后依次输出这5个数字。
# while循环numbers &#61; input("输入几个数字&#xff0c;用逗号分隔&#xff1a;").split(",")print(numbers)x &#61; 0while x < len(numbers): # 当x的值小于输入字数的个数的时候&#xff0c;执行循环内容 print (numbers[x]) x &#43;&#61; 1 # 一个循环结束时给x加1
代码说明&#xff1a;
下面【例3-6】中的这段代码演示了else子句在while循环中的使用。当变量x的值大于0时&#xff0c;执行循环&#xff0c;否则输出变量x的值。
例3-6.py&#xff1a;
# 带else子句的while循环x &#61; float(input("输入x的值&#xff1a;")) # 接收用户输入的数字并转换为float类型i &#61; 0while(x !&#61; 0): # Python 3中的不等于不再使用<>&#xff0c;一律使用!&#61; if(x > 0): x -&#61; 1 # 如果x大于0&#xff0c;则减1 else: x &#43;&#61; 1 # 如果x小于0&#xff0c;则加1 i &#61; i &#43; 1 print( "第%d次循环&#xff1a;%f" %(i, x))else: print ("x等于0&#xff1a;", x)
代码说明&#xff1a;
第2行代码输入变量x的值。
第3行代码定义变量i&#xff0c;变量i表示循环次数。
第4行代码&#xff0c;给出循环条件x !&#61; 0。如果x不等于0&#xff0c;则执行第5行代码&#xff1b;否则&#xff0c;执行else子句的内容。
第5行代码&#xff0c;判断变量x的值是否大于0。
第6行代码&#xff0c;如果x的值大于0&#xff0c;则每次循环都减1。
第7行代码&#xff0c;判断变量x的值是否小于0。
第8行代码&#xff0c;如果x的值小于0&#xff0c;则每次循环都加1。
第9行代码&#xff0c;每次循环使变量i的值加1。
第11行代码&#xff0c;循环结束&#xff0c;else子句输出变量x的值。输出结果&#xff08;假设输入数字为0&#xff09;&#xff1a;x等于0:0。
在使用循环语句时&#xff0c;应注意循环表达式的布尔值&#xff0c;避免出现死循环。死循环是指循环条件永远为真的循环。例如&#xff1a;
i &#61; 1while i > 0: # i永远大于0 i &#61; i &#43; 1 print(i)
这段代码就是一个死循环&#xff0c;变量i的值永远都大于0。
02 for循环
for循环用于遍历一个集合&#xff0c;依次访问集合中的每个项目。for循环的格式如下所示。
for 变量 in 集合&#xff1a; …else&#xff1a; …
for…in…循环的执行过程&#xff1a;每次循环从集合中取出一个值&#xff0c;并把该值赋值给变量。集合可以是元组、列表、字典等数据结构。其中else子句可以省略。
注意&#xff1a;for循环中的else子句也属于循环的一部分&#xff0c;最后一次循环结束后将执行else子句。
for…in…循环通常与range()函数一起使用&#xff0c;range()返回一个列表&#xff0c;for…in…遍历列表中的元素。range()函数的声明如下&#xff1a;
class range(object) range(stop) -> range objectrange(start, stop[, step]) -> range object
代码说明&#xff1a;
range()返回一个range对象&#xff0c;列表的元素值由3个参数决定&#xff1a;参数start表示列表开始的值&#xff0c;默认值为0&#xff1b;参数stop表示列表结束的值&#xff0c;该参数不可缺少&#xff1b;参数setp表示步长&#xff0c;即每次递增或递减的值&#xff0c;默认值为1。
下面【例3-7】中的这段代码遍历range()生成的列表&#xff0c;过滤出正数、负数和0。
例3-7.py&#xff1a;
# for in语句for x in range(-1, 2): if x > 0: print ("正数&#xff1a;",x) elif x &#61;&#61; 0 : print ("零&#xff1a;",x) else: print ("负数&#xff1a;",x)else: print ("循环结束")
代码说明&#xff1a;
第2行代码遍历range(-1,2)生成的列表。range(-1,2)返回的3个数字分别为-1、0、1。每次循环结束&#xff0c;变量x的值依次为-1、0、1。
第3行代码判断变量x的值是否大于0。
第4行代码输出正数的值。输出结果为“正数&#xff1a;1”。
第5行代码判断变量x的值是否等于0。
第6行代码&#xff0c;输出结果为“零&#xff1a;0”。
第8行代码&#xff0c;输出负数的值。输出结果为“负数&#xff1a;-1”。
第9行代码并没有结束for循环&#xff0c;else子句执行后循环才结束。输出结果为“负数&#xff1a;-1”。
在C、Java语言中&#xff0c;支持如下结构的for语句。
for(表达式1; 表达式2; 表达式3) 语句块
Python不支持这样的for循环。如果需要编写类似功能的循环&#xff0c;可以使用while循环。例如&#xff1a;
x &#61; 0while x < 5: print(x) x &#61; x &#43; 2
while循环的写法比较琐碎&#xff0c;需要比较判断。因此&#xff0c;对此也可以使用for循环&#xff0c;借助range()函数来实现。例如&#xff1a;
for x in range(0, 5, 2): print (x)
代码说明&#xff1a;
输出的数字在&#xff3b;0,5&#xff09;这个区间&#xff0c;不包括5。每次循环结束&#xff0c;x的值加2。输出结果&#xff1a;
024
这里只用了两行代码就实现了传统for循环。如果要用条件表达式作为循环的条件&#xff0c;可以构造range()函数来实现。
03 break和continue语句
break语句可以使程序跳出循环语句&#xff0c;从而执行循环体之外的程序&#xff0c;即break语句可以提前结束循环。例如&#xff0c;模拟switch分支结构使用了break语句。
operator &#61; "&#43;"x &#61; 1y &#61; 2for case in switch(operator): # switch只能用于for... in...循环中 if case(&#39;&#43;&#39;): print (x &#43; y) break if case(&#39;-&#39;): print (x - y) break if case(&#39;*&#39;): print (x * y) break if case(&#39;/&#39;): print (x / y) break if case(): # 默认分支 print ("")
代码说明&#xff1a;
第7行代码中使用了break。当变量operator的值为“&#43;”&#xff0c;则执行表达式x &#43; y&#xff0c;然后中断switch分支结构&#xff0c;后面的case分支都不会执行。此时输出结果为3。后面的break作用相同。当匹配到某个case后&#xff0c;程序将跳出switch。
如果第一个case不使用break子句&#xff0c;程序将输出两个值&#xff0c;分别是3和-1。因为执行完输出表达式x &#43; y后&#xff0c;分支结构并没有中断&#xff0c;程序将流转到下面一个case。然后继续计算表达式x – y的值&#xff0c;遇到后面的break语句才退出分支结构。break语句在循环结构中也有类似的作用。【例3-8】中的这段代码将从0到99中查找用户输入的值。
例3-8.py&#xff1a;
x &#61; int(input("输入x的值&#xff1a;"))y &#61; 0for y in range(0, 100): if x &#61;&#61; y: print ("找到数字&#xff1a;", x) breakelse: print("没有找到")
代码说明&#xff1a;
第1行代码捕获用户输入的值&#xff0c;并把该值转换为int类型&#xff0c;赋值给变量x。
第2行代码定义一个变量y&#xff0c;变量y用于暂存需要遍历的列表的值。
第3行代码使用for…in…循环遍历range(0, 100)返回的列表。range(0, 100)的返回值为0、1、2、…、99。
第4行代码判断输入的值是否等于列表中的值。如果条件成立&#xff0c;输出查找到的数字&#xff0c;并立即退出循环。循环结束&#xff0c;后面的else子句将不会被执行。
第7行代码&#xff0c;当没有找到输入的值时&#xff0c;else子句后面的代码将被执行。
注意&#xff1a;break语句不能运行在循环体或分支语句之外&#xff0c;否则&#xff0c;Python解释器将提示如下错误。
SyntaxError: &#39;break&#39; outside loop
continue语句也是用来跳出循环的语句&#xff0c;但是与break不同的是&#xff0c;使用continue语句不会跳出整个循环体&#xff0c;只是跳出当前的循环&#xff0c;然后继续执行后面的循环。
x &#61; 0for i in [1,2,3,4,5]: if x &#61;&#61; i: continuex &#43;&#61; iprint("x的值为", x)
代码说明&#xff1a;
第1行代码将x赋值为0。
第2行代码使用for...in...语句遍历列表[1,2,3,4,5]。
第3行代码将x与i进行比较&#xff0c;如果x与值i相等&#xff0c;则执行第4行的continue语句&#xff0c;停止当前循环&#xff0c;即不再执行第5行代码&#xff0c;继续执行下一个循环。
第6行代码打印出最终的结果&#xff0c;输出为12。
关于作者&#xff1a;黄传禄&#xff0c;高级讲师、管理软件开发工程师、数据库库系统工程师、信息系统管理工程师。有10多年的一线教学经验和高端培训经验&#xff0c;出版多部技术专著&#xff0c;获得多个软件著作权。
本文摘编自《零基础学Python》&#xff08;第2版&#xff09;&#xff0c;经出版方授权发布。
编辑&#xff1a;黄继彦