当前位置: 首页 > 后端技术 > Python

值得收藏!16段代码入门Python循环语句

时间:2023-03-26 10:49:29 Python

【攻略】本文重点介绍for语句和while语句。for语句是一个遍历循环,而while语句是一个while循环。除了两条循环语句外,还引入了break、continue、pass三种语句来控制循环结构中的程序流程。除此之外,还介绍了列表理解,一种特殊的循环语句。循环语句,也称为重复结构,用于重复执行一个操作。面对大规模的重复计算,即使借助计算机,重复编写代码也很耗时。这时候就需要循环语句了。循环语句的使用一般需要进行条件判断,根据判断表达式的返回值来决定是否执行循环体。循环分为两种模式,一种是条件满足时执行循环体,另一种相反,条件不满足时执行循环体。前者称为while循环,后者称为until循环。在图1中,虚线框内是一个when型循环结构,包括判断条件、循环体和连接各部分的流水线。程序执行时,首先判断条件是真还是假。当判断为真时,执行循环体;当判断为假时,不再执行循环体,循环结束。when型循环先进行条件判断,如果满足循环条件,则执行循环体,因此又称为预测试循环。图2中,虚线框内是一个until型的循环结构,包括判断条件、循环体和连接各部分的流线。程序执行时,先执行一次循环体,然后判断执行循环的结果是否满足判断条件。当条件满足时,再次执行循环体;当条件不满足时,不再执行循环体。until型循环在执行判断之前进入循环体,所以也称为后测试循环。Python中有两种主要类型的循环语句,for语句和while语句。前者使用遍历的形式来指定循环的范围,后者根据判断表达式的返回值来决定是否执行。为了更灵活地操纵循环的流程,使用了break、continue和pass等语句。01forfor循环是一个迭代循环,相当于Python中通用的序列迭代器。可以遍历任何有序序列,如str、list、tuple等,也可以遍历任何可迭代对象,如dict。与C语言不同的是,Python中的for语句会遍历系列中的所有成员,遍历的顺序就是系列中成员的先后顺序。请注意,更改for循环中任何序列的内容都是危险的!for语句不属于when循环或until循环。它遍历序列对象中的元素,并为每个元素运行一次循环体。循环步数在程序开始执行的时候就已经指定了,不是条件判断。在for语句中,for和in组合成一个for-in循环结构,for-in循环依次遍历列表或元组中的每一个元素。for语句的基本语法格式如下:forvariableinsequence:操作语句for语句常用的语法格式和参数说明如下:sequence:接收顺序,表示遍历范围,无默认值操作语句:接收操作语句,表示执行一段代码,无默认值程序的执行从“forvariableinsequence”开始。该语句将序列中的每个元素代入一个变量,执行一次操作语句1,重复次数为序列中元素的个数。为了演示for循环的遍历功能,依次打印列表中的名字,如清单1所示。代码清单1:for语句遍历并提取str'''没有人回答问题?小编创建了一个Python学习交流QQ群:857662006,寻找志同道合的小伙伴互相帮助。群里还有不错的视频学习教程和PDF电子书!'''#简单遍历for语句names=['Michael','Bob','Tracy']#遍历输出names中的元素fornameinnames:print(name)输出结果:MichaelBobTracyfor语句也可以实现dict遍历方法如清单2所示。代码清单2:for语句遍历查询dict'''无人回答问题?小编创建了一个Python学习交流QQ群:857662006,寻找志同道合的小伙伴互相帮助。群里还有不错的视频学习教程和PDF电子书!'''dic={'a':1,'b':2,'c':3,'d':4}#遍历键值对print('key_value:',end='')forkey,valueindic.items():print(key,value,sep=':',end='')#遍历键print('keys:',end='')forkeyindic.keys():print(key,end='')#遍历valueprint('values:',end='')forvalueindic.values():print(value,end='')outputresult:key_value:a:1b:2c:3d:4keys:abcdvalues:1234从代码清单2可以看出,for语句中用于遍历的“变量”不仅可以是Python的默认代词,还可以也是一个常规变量。和条件语句一样,循环语句也可以嵌套,这也丰富了程序的功能。设计一个成绩录入系统,需要录入姓名和课程两类信息,仅靠一层循环是无法实现的。可以使用两层循环结构,如代码清单3所示。代码清单3:嵌套for语句'''遇到问题却没人回答?小编创建了一个Python学习交流QQ群:857662006,寻找志同道合的小伙伴互相帮助。群里还有不错的视频学习教程和PDF电子书!'''students=['小1','小2']subjects=['语文','数学']sum1=[]avg=[]foriinstudents:print('开始输入考试分数%s!'%i)sum=0forjinsubjects:print('Pleaseenter%sscore:'%j)score=int(input())sum+=scoreaverage=sum/2avg.append(average)sum1.append(sum)print(students,'总分有序',sum1,',','平均分有序',avg)print('分数录入完成!')输出结果:start进入小1的测试分数!请输入语文成绩:97请输入数学成绩:90开始输入小二考试成绩!请输入语文成绩:89请输入数学成绩:100['小一','小二']的总分是[187,189],平均分是[93.5,94.5],分数输入是完全的!理论上for循环也可以无限嵌套,但不推荐。02while语句是Python中最常用的递归结构。与for循环不同的是,while循环结构中包含一个条件判断公式,属于条件循环,属于while循环。while语句的最基本形式由顶部的布尔表达式和一个或多个属于while块的缩进语句组成。你也可以在末尾包含一个else代码块,它与while代码块处于同一级别,形成while-else形式。while语句的基本语法如下。while条件表达式:运算语句1运算语句2while语句常用参数及其说明如下:条件表达式:接收一个布尔表达式,表示条件是否成立。无默认值的操作语句:接收一条操作语句,即执行一段代码。当while语句在没有默认值的情况下执行时,只要最上面的条件表达式返回真值,while部分嵌套的递归代码就会一直执行。当条件表达式返回假值时,不再执行运算语句,程序跳出while结构。while语句的基本用法如清单4所示。代码清单4:while语句'''遇到问题却没人回答?小编创建了一个Python学习交流QQ群:857662006,寻找志同道合的小伙伴互相帮助。群里还有不错的视频学习教程和PDF电子书!'''sum=0n=99whilen>0:sum+=nn-=2print(sum)输出结果:如果布尔表达式没有<,>,==,!则为2500也可以使用=、in和notin等运算符,它们只给出值等条件。当while后面写入非零整数时,视为真值,执行循环体;当写入0时,视为假值,不执行循环体。也可以写入str、list或任何序列。如果长度不为零,则认为是真值,执行循环体;否则视为假值,不执行循环体。如果布尔表达式总是返回1,则while语句就变成了无限循环,如清单5所示。代码清单5:while语句'''的无限循环有问题,没人回答?小编创建了一个Python学习交流QQ群:857662006,寻找志同道合的小伙伴互相帮助。群里还有不错的视频学习教程和PDF电子书!'''#布尔表达式为常量1,始终为真while1:print('loop')outputresult:looploop...#每次递归运算布尔表达式为2,始终为真x,y=2,1whilex/y:print('loop')x=x*2y=y*2输出结果:looploop...运行代码清单5,将连续打印出“loop”。代码清单5展示了两种创建无限循环的方法,一种是在while之后写入一个固定的真值,另一种是编写一个始终生成真值的表达式。要终止死循环,可以使用快捷键Ctrl+C中断循环的执行,也可以使用循环终止语句,下面会介绍。灵活使用while语句中的布尔表达式和代入表达式的递归值,可以实现特殊功能,如代码清单6所示。代码清单6:while语句实现str拦截'''有问题没有答案吗?小编创建了一个Python学习交流QQ群:857662006,寻找志同道合的小伙伴互相帮助。群里还有不错的视频学习教程和PDF电子书!'''string='abcd'whilestring:print(string)#这条语句递归计算是每次从str的第二个字符开始截取string=string[1:]输出结果:abcdbcdcdd代码清单6包含一个Self-decrement迭代值,不是通过明显的操作符实现自减,而是使用index规则,x变量从str中的第二个值开始截取到末尾,每次截取str前面的字符,当最后只剩下一个字符时,再次截取时只会有一个空结果,布尔表达式返回0,循环终止。从代码清单5和代码清单6可以看出,灵活使用递归可以实现对程序流程的控制。while循环也可以嵌套,嵌套while循环实现成绩录入系统,如清单7所示。代码清单7:嵌套while语句'''遇到问题没人回答?小编创建了一个Python学习交流QQ群:857662006,寻找志同道合的小伙伴互相帮助。群里还有不错的视频学习教程和PDF电子书!'''j=1whilej<=2:sum=0i=1name=input('请输入学生姓名:')whilei<=2:print('请输入%d门的考试成绩:'%i)sum+=int(input())i+=1avg=sum/(i-1)print(name,'平均成绩为%d'%avg)j+=1print('学生成绩输入完成!')输出结果:请输入学生姓名:小一请输入第一科考试成绩:98请输入第二科考试成绩:88小一平均分93请输入学生姓名:小一2请输入第一门考试成绩:65请输入第二门考试成绩:100小二平均分82学生成绩输入完成!代码清单7第一层while语句用于录入人名,第二层用于录入每个人名下的多个年级,布尔表达式决定录入的人数和课程.03break、continue和pass前面两节介绍了Python中的两个循环语句。还可以在循环语句中嵌入break、continue、pass语句,灵活改变流向,实现更多功能。1.break在Python中,break语句用于终止循环语句的执行。使用该语句时,即使循环条件判断为真,或者序列没有完全递归,也会立即停止循环语句。break语句一般与条件判断结合使用,因为程序的终止必须在满足某个条件时执行。for循环和while循环中break语句的使用如清单8所示。代码清单8:break语句的使用#break语句用于for循环string="Python"foriinstring:#When遍历到字符串中的字符n,ifi=='n'不再执行else代码块:breakelse:print("letter:{}".format(i))输出结果:letter:Pletter:yletter:tletter:hletter:o'''遇到问题没人回答?小编创建了一个Python学习交流QQ群:857662006,寻找志同道合的小伙伴互相帮助。群里还有不错的视频学习教程和PDF电子书!'''#while循环中使用了break语句counts=0whileTrue:print(counts)counts+=1#当counts等于3时跳出循环,不再进入循环体ifcounts==3:breakoutputresult:012从代码中可以看出,在清单8中,for循环和while循环中使用的break语句是有区别的。在for循环中使用时,遍历中循环体只有一次执行结束;在while循环中使用时,整个循环终止。break仅在该层终止循环。如果有多个嵌套循环,在其中一个循环中写break,只在本次循环中生效。该程序将跳转到上一个循环并继续运行,如清单9所示。代码清单9:嵌套循环结构中使用了break语句'''有问题没有答案吗?小编创建了一个Python学习交流QQ群:857662006,寻找志同道合的小伙伴互相帮助。群里还有不错的视频学习教程和PDF电子书!'''#第1层循环,遍历次数为2foriinrange(2):print("-----%d-----"%i)#第2层循环,遍历次数为10forjinrange(10):#使用break语句,当j>1时不执行循环体ifj>1:breakprint(j)outputresult:-----0-----01-----1-----01代码清单9中,在条件判断表达式“ifj>1:”之后使用了break语句,所以虽然j的指定遍历次数为10次,但实际上是遍历只跑两次。由于break语句只是终止本层循环的运行,所以i还是遍历了两次,而不是在第一次遍历过程结束时终止。2、continuePython中的continue语句用于跳出当前循环执行下一个循环,而break跳出整个循环,两者的作用明显不同。如果一段代码中包含continue语句,当循环执行到continue点时,会先忽略本次循环,在剩余的仍满足本层条件的循环次数中继续执行,循环该层不会被终止。实际上,如果在某一层的每个循环中都使用continue语句,就相当于使用了break语句。打印一张数字表,或者不打印某些指定的数字,或者只打印某些类型的数字,可以使用continue语句来跳过一些循环次数,这个语句可以在for循环和while循环中自由使用,如下所示代码清单10所示。代码清单10:循环结构中使用了continue语句#当i等于1或3时,跳过continueforiinrange(0,5)之后的打印语句:ifi==1ori==3:continueprint(i)Outputresult:024'''有问题没有回答吗?小编创建了一个Python学习交流QQ群:857662006,寻找志同道合的小伙伴互相帮助。群里还有不错的视频学习教程和PDF电子书!'''#如果遇到偶数,跳过continuecounts=0后的print语句whilecounts<10:counts+=1ifcounts%2==0:continueprint(counts)output:13579一旦使用了break语句forembedding在第n层循环中,会终止本层循环,但是当执行到第n-1层循环时,仍然会创建并执行第n层循环。continue语句也是如此,但仍然执行了一层的剩余部分。因此,无论使用哪一种循环终止语句,都只会影响使用终止语句的循环层,而不会干扰其他层。在循环中使用continue语句的示例如清单11所示。代码清单11:在嵌套循环结构中使用continue语句'''是否有问题且没有答案?小编创建了一个Python学习交流QQ群:857662006,寻找志同道合的小伙伴互相帮助。群里还有不错的视频学习教程和PDF电子书!'''#第1层循环,遍历次数为2foriinrange(2):print("-----%d-----"%i)#第2层循环,遍历次数为5forjinrange(5):#当j等于2或4时,不执行循环体ifj==2orj==4:continueprint(j)Outputresult:-----0-----013-----1-----0133。passpass是一个空语句,不执行任何操作,只充当占位符。它的作用是维护程序结构的完整性。虽然pass语句什么都不做,但是如果你不确定在某个位置放什么样的代码,可以先放一个pass语句,这样代码才能正常运行。pass语句不是循环或条件语句的一部分,但它在代码形式上有点类似于break和continue。使用pass语句遍历输出str并进行数值计算,如清单12所示。代码清单12:“Python”中元素的pass语句:#当element为y时,不进行任何操作,如果element不输出=="y":passelse:print(element)outputresult:Python'''有问题没有答案?小编创建了一个Python学习交流QQ群:857662006,寻找志同道合的小伙伴互相帮助。群里还有不错的视频学习教程和PDF电子书!'''counts=0whilecounts<5:counts+=1#当i=3时,不执行循环体ifcounts==3:passelse:print(counts**2)输出结果:141625可以是从代码清单12可以看出,Python占据了“P”和“t”之间的位置,在循环遍历到“y”时不做任何事情;当i等于3时,不进行幂运算,但不影响其他值。如果pass位置缺少上面两个代码,程序将无法执行,因为判断条件没有给出相应的执行语句,会导致逻辑错误。使用pass语句占空间,一方面是为了让程序能够正常执行,另一方面是为了方便以后添加操作语句。04列表推导推导是一种结构,可以从一个数据序列构造出另一个新的数据序列,并且可以非常简洁地构造新的变量。列表理解是其中最常用的类型。Listcomprehension,也称为列表理解,是Python迭代机制的一种应用,是创建列列表的一种高效方式,可以动态创建列表。由于列表理解必须使用遍历循环,因此它们是一种特殊的循环。使用列表推导式时,需要将推导式写在[]中。列表中的元素可以来自其他类型的序列、可迭代对象或满足一定条件的自建序列。使用列表理解的好处是代码更简洁,执行效率更高。列表推导的基本语法格式如下:[operationstatementforvariableinsequenceifconditionalexpression]列表推导的常用参数及其说明如下:操作语句:接收一个操作语句,表示执行一个一段代码。无默认值的条件表达式:接收一个布尔表达式,表示条件是否为真。无默认值Sequence:接收一个序列,表示要遍历的范围。没有默认值的列表推导不需要包含条件表达式,只遍历生成列表,如清单13所示。代码清单13:使用列表推导生成列表'''有没有问题没有答案?小编创建了一个Python学习交流QQ群:857662006,寻找志同道合的小伙伴互相帮助。群里还有不错的视频学习教程和PDF电子书!'''vec=[-4,-2,0,2,4]#使用vec中元素的倍数创建一个数组print([x*2forxinvec])output:[-8,-4,0,4,8]#创建一个listprint([(x,x**2)forxinrange(6)])包含2元素元组输出:[(0,0),(1,1),(2,4),(3,9),(4,16),(5,25)]清单13中,除了列表推导的简单形式外,还展示了列表推导可以使用各种函数和变量类型.此外,条件语句也可以包含在列表推导中,如清单14所示。代码清单14:包含条件语句的列表推导#过滤列表并删除列表中的负数print([xforxinvecifx>=0])Output:[0,2,4]最大的列表推导优点还是简洁,需要和常规的编程方式对比一下。如清单15所示,要创建一个平方数列表,这里的两种方法是等效的,但列表推导式方法显然更简洁。代码清单15:常规方法与列表理解的比较'''有问题没有答案吗?小编创建了一个Python学习交流QQ群:857662006,寻找志同道合的小伙伴互相帮助。群里还有不错的视频学习教程和PDF电子书!'''#创建正方形列表:常规方式squares=[]forxinrange(10):squares.append(x**2)print(squares)output:[0,1,4,9,16,25,36,49,64,81]#创建平方数列表listderivationsquares=[x**2forxinrange(10)]print(squares)output:[0,1,4,9,16,25,36,49,64,81]嵌套循环也可以在列表推导中实现,如清单16所示。代码清单16:包含嵌套循环的列表推导#打印一个由元组组成的列表,iintuplesrangefrom0到2,并且j的范围从0到2[(i,j)foriinrange(0,3)forjinrange(0,3)]输出结果:[(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(2,0),(2,1),(2,2)]#打印由元组组成的列表,i在0和2之间且小于1,j在0和2之间且大于1[(i,j)foriinrange(0,3)ifi<1forjinrange(0,3)ifj>1]output:[(0,2)]清单16中所示的列表理解将来自不同列表的两个元素合并在一起。列表推导由一对圆括号组成,圆括号中有一个表达式,后跟一个for语句,然后是零个或多个for语句或if语句。该表达式通过for语句和if语句进行计算,结果作为新列表的元素。