Python语言程序设计第5章循环结构程序设计2第5章循环结构程序设计循环结构程序设计5.1while语句(当型循环)5.2for语句结构5.3循环的嵌套5.4循环控制语句5.5循环结构程序举例3第5章循环结构程序设计循环结构的基本类型当型循环while,forexpAFT4第5章循环结构程序设计循环结构程序设计循环结构程序设计的应用场合:当某个条件满足时,需要多次反复进行同样工作。例如:1、求实数x的10次方2、求数列1,2,…,i,…的前n项和3、判断一个整数是否是素数………………5第5章循环结构程序设计5.1while语句(当型循环)特点:先判断,再执行while语句的语法格式:注意:1.循环体可能一次也不执行。2.循环体可为任意类型语句。3.退出while循环的情况:exp不成立循环体内遇break,return,exit等。exp循环体FTwhileexp:循环体6第5章循环结构程序设计在while语句中使用else子句Python可以在循环语句中使用else子句,即构成了while.......else循环结构。whileexp:循环体else:语句8第5章循环结构程序设计例:求1)问题分析:sum,n=0,1n=100sum=sum+nn=n+1YN输出sum结束开始sum=1+2+…+100100个数循环语句:循环变量初始化:循环控制条件:循环体:循环变量的修改:1001nnn=1n=100sum+=nn=n+19第5章循环结构程序设计例:求sum,n=0,1whilen=100:sum=sum+nn=n+1printf(1+2+3+....+100=,sum)循环语句四要素:循环(控制)变量初始化循环控制条件循环体(关键是找规律)循环变量的修改1001nn运行结果:1+2+3.......+100=505010第5章循环结构程序设计while语句对于while语句的用法,要注意以下几点:(1)如果while后面表达式的值一开始就为假,则循环体一次也不执行。(2)循环体中的语句可以任意类型的语句。(3)遇到下列情况,退出while循环:A表达式不成立B循环体内遇到break、return语句。11第5章循环结构程序设计例:从键盘输入若干个数,求所有正数之和。当输入负数时,程序结束。输入xsum=0x=0sum=sum+xYN输出sum结束开始循环语句四要素:循环变量初始化:循环控制条件:循环体:循环变量的修改:输入x的值x=0sum=sum+x输入x的值输入x12第5章循环结构程序设计例:从键盘输入若干个数,求所有正数之和。当输入0或负数时,程序结束sum=0x=input(“请输入正整数:)whilex=0:sum=sum+xx=input(“请输入正整数:)printf(sum=,sum)14第5章循环结构程序设计5.1while语句——说明1.while语句之前必须预先设置判断的初始条件2.防止“死循环”的发生在循环体中必须有使循环趋向结束的操作,即在循环体中要有能让逻辑表达式值改变的语句3.正确使用缩进当循环体中含多条语句时,需用缩进这些多条语句,而且缩进一定要符合逻辑关系4.在循环体中,语句的先后位置必须符合逻辑否则会影响运算结果。15第5章循环结构程序设计5.2for语句结构1.for语句一般形式:for目标变量in序列对象:循环体语句说明:for语句的首行定义了目标变量和遍历的序列对象,后面是需要重复执行的语句块。语句块中的语句要向右缩进,且缩进量要一致。16第5章循环结构程序设计注意:(1)for语句是通过遍历任意序列的元素来建立循环的。(2)for语句也支持一个可选的else块,一般格式如下:for目标变量in序列对象:语句块else:语句17第5章循环结构程序设计2.range对象在for循环中的应用range函数返回的是可迭代对象,range()函数的一般格式为:range([start,]end[,step])rang()函数共有三个参数,start和step是可选的,start表示开始,默认值为0,end表示结束,step表示每次跳跃的间距,默认值为1。函数的功能是从一个start参数的值开始,到end参数的值结束的数字序列。18第5章循环结构程序设计传递一个参数的range()函数:foriinrange(5):print(i)传递两个参数的range()函数:foriinrange(2,4):print(i)传递三个参数的range()函数:foriinrange(2,20,3):print(i)range()19第5章循环结构程序设计例用for循环求1001nnsum=0foriinrange(101):sum=sum+iprint(“1+2+3+....+100”,sum)sum=0foriinrang(101):sum=sum+i输出sum20第5章循环结构程序设计m=int(input(“请输入要判断的正整数m”))flag=1foriinrange(2,m):ifm%i==0:flag=0i=mifflag==1:print(“%d是素数”%m)else:print(“%d不是素数”%m)例判断m是否为素数。21第5章循环结构程序设计例:已知四位数3025具有特殊性质:它的前两位数字30与后两位数字25之和是55,而55的平方正好等于其本身3025。编程列举出具有该性质的四位数。print(“满足条件的四位数分别是:”)foriinrange(1000,10000):a=i//100b=i%100if(a+b)**2==i:print(i)22第5章循环结构程序设计print(“满足条件的数分别是:”)count=0foriinrange(1,100):ifi%7==0andi%11!=0ori%11==0andi%7!=0:print(i,end=””)count=coun+1ifcount%10==0:print(“”)例求出1到100能被7或11整除但不能被7和11同时整除的所有整数并将它们输出。每行10个。23第5章循环结构程序设计5.3循环嵌套循环的嵌套,又称多层循环,应用于多个变量同时变化的情况。说明:1.外层循环可包含两个以上内循环2.嵌套的循环的执行流程24第5章循环结构程序设计5.3循环嵌套注意:1.while、for循环语句可以并列,也可以相互嵌套,但要层次清楚,不能出现交叉2.多重循环程序执行时,外层循环每执行一次,内层循环都需要循环执行多次。1.外循环执行了6次2.内循环执行10次3.循环正常结束时,内循环执行了10×6=60次foriinrange(6):forjinrange(10):……26第5章循环结构程序设计循环嵌套在使用中的重点内容能够正确判断内层循环体的范围能够正确判断内层循环体的执行次数注意内层循环的初值设定能正确处理内层循环与外层循环变量的关系5.3循环嵌套27第5章循环结构程序设计例:输出九九表,输出格式如下:1*1=11*2=22*2=41*3=32*3=63*3=91*4=42*4=83*4=124*4=161*5=52*5=103*5=154*5=205*5=251*6=62*6=123*6=184*6=245*6=306*6=361*7=72*7=143*7=214*7=285*7=356*7=427*7=491*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=641*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81foriinrange(1,10,1):forjinrange(1,i+1,1):print(“%d*%d=%2d”%(j,i,i*j),end=””)print(“”)28第5章循环结构程序设计例:找出所有的三位数,要求它的各位数字的立方和正好等于这个三位数。例如:153=13+53+33就是这样的数。foriinrange(1,10):forjinrange(0,10):forkinrange(0,10):ifi**3+j**3+k**3==i*100+j*10+k:print(%d%d%d%(i,j,k))程序运行结果:15337037140729第5章循环结构程序设计例:求100~200之间的全部素数。print(100~200之间的素数有:)forminrange(100,200):flag=1foriinrange(2,m):ifm%i==0:flag=0i=mifflag==1:print(m,end=)30第5章循环结构程序设计5.4循环控制语句有时候我们需要在循环体中提前跳出循环,或者在某种条件满足时,不执行循环体中的某些语句而立即从头开始新的一轮循环,这时就要用到循环控制语句break、continue和pass语句。31第5章循环结构程序设计一般格式break功能break语句用在循环体内,迫使所在循环立即终止,即跳出所在循环体,继续执行循环结构后面的语句。(1)break语句……break……expNY32第5章循环结构程序设计分析:找出m与n中较小的一个,则最大公约数必在1与较小整数的范围内。使用for语句,循环变量i从较小整数变化到1。一旦循环控制变量i同时能被m与n整除,则i就是最大公约数,然后使用break语句强制退出循环。求两个整数m与n的最大公约数。m,n=eval(input(请输入两个整数:))ifmn:min=melse:min=nforiinrange(min,1,-1):ifm%i==0andn%i==0:print(最大公约数是:,i)break33第5章循环结构程序设计一般格式continue功能在循环语句中强行提前结束本次循环,而不是终止循环。(2)continue语句……continue……expNY34第5章循环结构程序设计例求1~100之间的全部奇数之和。程序如下:x=y=0whileTrue:x+=1ifx%2==0:continueelifx100:breakelse:y+=xprint(y=,y)程序运行结果:y=250035第5章循环结构程序设计(3)pass语句pass语句是一个空语句,它不做任何操作,代表一个空操作,在特别的时候用来保证格式或是语义的完整性。例如下面的循环语句:foriinrange(5):pass该语句的确会循环5次,但是除了循环本身之外,它什么也没做。36第5章循环结构程序设计例:pass语句应用:逐个输出“Python”字符串中的字符。forletterinPython:ifletter==o:passprint(Thisispassblock)print(CurrentLetter:,letter)print(End!)程序运行结果:CurrentLetter:PCurrentLetter:yCurrentLetter:tCurrentLetter:hThisispassblockCurrentLetter:oCurrentLetter:nEnd!37第5章循环结构程序设计5.5循环结构程序举例例:利用下面的公式求的近似值,要求累加到最后一项小于10-6为止。程序如下:importmaths=1n=1.0t=1.0pi=0whilemath.fabs(t)=1e-6:pi=pi+tn=n+2s=-st=s/npi=pi*4print(PI=%f%pi)程序运行结果:PI=3.14159138第5章循环结构程序设计例:“百钱百鸡”问题。公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买一百只鸡,其中公鸡、母鸡、小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足100文钱?分析:显然这是一个组合问题,也可以看作是解不定方程的问题,采用列举的方法实现。令i、j、k分别表示公鸡、母鸡和小鸡的数目。[方法一]令i、j、k的列