1、PythonPython语言程序设计语言程序设计第第5 5章章 循环结构程序设计循环结构程序设计2 第第5 5章章 循环结构程序设计循环结构程序设计5.1 while语句语句(当型循环当型循环)5.2 for语句结构语句结构5.3循环的嵌套循环的嵌套5.4 循环控制语句循环控制语句5.5 循环结构程序举例循环结构程序举例3 第第5 5章章 循环结构程序设计循环结构程序设计n 当型循环当型循环while, forexpAFT4 第第5 5章章 循环结构程序设计循环结构程序设计循环结构程序设计的应用场合:循环结构程序设计的应用场合:当某个条件满当某个条件满足时,需要多次反复进行同样工作足时,需要多
2、次反复进行同样工作。5 第第5 5章章 循环结构程序设计循环结构程序设计n特点:特点:先判断,再执行先判断,再执行nwhile while 语句的语法格式:语句的语法格式:注意:注意:1. 循环体循环体可能一次也不执行可能一次也不执行。2. 循环体可为循环体可为任意类型语句任意类型语句。3. 退出退出while循环循环的情况的情况:p exp不成立不成立p 循环体循环体内遇内遇break, return, exit等。等。exp循环体循环体FTwhile exp: 循环体循环体6 第第5 5章章 循环结构程序设计循环结构程序设计Python可以在循环语句中使用可以在循环语句中使用else子句,
3、即构子句,即构成了成了while.else循环结构。循环结构。while exp: 循环体循环体else: 语句语句7 第第5 5章章 循环结构程序设计循环结构程序设计例如:例如:count=int(input()while count5:print(count,”is less than 5”) count=count+1else:print(count,”is not less than 5”)程序运行结果88 is not less than 58 第第5 5章章 循环结构程序设计循环结构程序设计n1)问题分析:)问题分析: sum,n=0,1n=100sum=sum+n n=n+1YN
4、输出输出sum结束结束开始开始sum = 1+2+100 100个数个数n 循环语句:循环语句:循环变量初始化:循环变量初始化:循环控制条件:循环控制条件:循环体:循环体:循环变量的修改:循环变量的修改:1001nnn1n=100sum+=nn=n+19 第第5 5章章 循环结构程序设计循环结构程序设计 sum,n=0,1 while n= 0sum=sum+x YN输出输出sum结束结束开始开始n 循环语句四要素:循环语句四要素:循环变量初始化:循环变量初始化:循环控制条件:循环控制条件:循环体:循环体:循环变量的修改:循环变量的修改: 输入输入x的值的值x=0 sum=sum+x 输入输入
5、x的值的值输入输入x12 第第5 5章章 循环结构程序设计循环结构程序设计sum=0 x=input(“请输入正整数请输入正整数:)while x=0:sum=sum+xx=input(“请输入正整数请输入正整数:) printf(sum=, sum)13 第第5 5章章 循环结构程序设计循环结构程序设计例题:输入一个正整数例题:输入一个正整数x,如果,如果x满足满足0 x=0 and x0: i=i/10 n=n+1 a=x%10 print(“%d是是%d位数,它的个位上数字位数,它的个位上数字是是”%(x, n,a) else: print(“输入错误!输入错误!”)14 第第5 5章章
6、 循环结构程序设计循环结构程序设计说明说明1. while 语句之前必须语句之前必须预先设置判断的初始条件预先设置判断的初始条件2. 防止防止“死循环死循环”的发生的发生 在循环体中必须有使循环趋向结束的操作,即在循环体中必须有使循环趋向结束的操作,即 在循环体中要有能让逻辑表达式值改变的语句在循环体中要有能让逻辑表达式值改变的语句3. 正确使用缩进正确使用缩进 当循环体中含多条语句时当循环体中含多条语句时,需用缩进这些多条语需用缩进这些多条语句,而且缩进一定要符合逻辑关系句,而且缩进一定要符合逻辑关系 4.在循环体中,在循环体中,语句的先后位置必须符合逻辑语句的先后位置必须符合逻辑 否则会影
7、响运算结果。否则会影响运算结果。15 第第5 5章章 循环结构程序设计循环结构程序设计1. for语句一般形式:语句一般形式: for 目标变量目标变量 in 序列对象:序列对象: 循环体语句循环体语句说明:说明: for语句的首行定义了目标变量和遍历的序语句的首行定义了目标变量和遍历的序列对象,后面是需要重复执行的语句块。语列对象,后面是需要重复执行的语句块。语句块中的语句要向右缩进,且缩进量要一致。句块中的语句要向右缩进,且缩进量要一致。16 第第5 5章章 循环结构程序设计循环结构程序设计注意:注意:(1)for语句是通过遍历任意序列的元素来建立语句是通过遍历任意序列的元素来建立循环的。
8、循环的。(2)for 语句也支持一个可选的语句也支持一个可选的else块,一般格块,一般格式如下:式如下:for 目标变量目标变量 in序列对象:序列对象: 语句块语句块else: 语句语句17 第第5 5章章 循环结构程序设计循环结构程序设计2. range 对象在对象在for循环中的应用循环中的应用 range函数返回的是可迭代对象,函数返回的是可迭代对象,range()函数的()函数的一般格式为:一般格式为: range(start,end,step) rang ()函数共有三个参数,函数共有三个参数,start和和step是可选的,是可选的,start表示开始,默认值为表示开始,默认值
9、为0,end表示结束,表示结束,step表示表示每次跳跃的间距,默认值为每次跳跃的间距,默认值为1。函数的功能是从一个。函数的功能是从一个start参数的值开始,到参数的值开始,到end参数的值结束的数字序列。参数的值结束的数字序列。18 第第5 5章章 循环结构程序设计循环结构程序设计传递一个参数的range()函数: for i in range(5):print(i)传递两个参数的range()函数: for i in range(2,4):print(i)传递三个参数的range()函数: for i in range(2,20,3):print(i)range()()19 第第5 5
10、章章 循环结构程序设计循环结构程序设计例例 用用for循环求循环求1001nnsum=0for i in range(101):sum=sum+iprint(“1+2+3+.+100”,sum)sum=0for i in rang(101):sum=sum+i输出输出sum20 第第5 5章章 循环结构程序设计循环结构程序设计m=int(input(“请输入要判断的正整数请输入要判断的正整数m”))flag=1for i in range(2,m):if m%i=0:flag=0i=m if flag=1: print(“%d 是素数是素数”%m)else: print(“%d不是素数不是素数
11、”%m) 例例 判断判断m是否为素数。是否为素数。21 第第5 5章章 循环结构程序设计循环结构程序设计例:已知四位数例:已知四位数3025具有特殊性质:它的前具有特殊性质:它的前两位数字两位数字30与后两位数字与后两位数字25之和是之和是55,而,而55的平方正好等于其本身的平方正好等于其本身3025。编程列举出具。编程列举出具有该性质的四位数。有该性质的四位数。print(“满足条件的四位数分别是:满足条件的四位数分别是:”) for i in range(1000,10000): a=i/100b=i%100if (a+b)* *2=i:print(i)22 第第5 5章章 循环结构程序
12、设计循环结构程序设计print(“满足条件的数分别是:满足条件的数分别是:”)count=0for i in range(1,100):if i%7=0 and i%11!=0 or i%11=0 and i%7!=0: print(i ,end=” ”) count=coun+1 if count%10=0:print(“ ”) 例例 求出求出1到到100能被能被7或或11整除但不能被整除但不能被7和和11同时整除的所有整数同时整除的所有整数并将它们输出。每行并将它们输出。每行10个。个。23 第第5 5章章 循环结构程序设计循环结构程序设计 循环的嵌套,又称循环的嵌套,又称多层循环多层循环
13、,应用于,应用于多多个变量同时变化个变量同时变化的情况。的情况。说明:说明:1. 外层循环可包含两个以上内循环外层循环可包含两个以上内循环 2. 嵌套的循环的执行流程嵌套的循环的执行流程24 第第5 5章章 循环结构程序设计循环结构程序设计 注意:注意:1. while、for循环语句可以并列循环语句可以并列,也可以相互嵌也可以相互嵌套套,但要但要层次清楚层次清楚,不能出现交叉不能出现交叉2. 多重循环程序执行时,外层循环每执行一次,多重循环程序执行时,外层循环每执行一次,内层循环都需要循环执行多次。内层循环都需要循环执行多次。1. 外循环外循环执行了执行了6次次2. 内循环内循环执行执行10
14、次次3. 循环正常结束时循环正常结束时, 内循环执行了内循环执行了 106=60次次for i in range (6): for j in range (10): 25 第第5 5章章 循环结构程序设计循环结构程序设计循环语句while和for可以相互嵌套。在使用循环嵌套时,应注意以下几个问题:(1)外层循环和内层循环控制变量不能同名,以免造成混乱。(2)循环嵌套的缩进在逻辑上一定要注意,以保证逻辑上的重要性。(3)循环嵌套不能交叉,即在一个循环体内必须完整地包含另一个循环,如图5.10所示的循环嵌套都是合法的嵌套形式。26 第第5 5章章 循环结构程序设计循环结构程序设计循环嵌套在使用中的
15、循环嵌套在使用中的重点内容重点内容能够正确判断内层循环体的范围能够正确判断内层循环体的范围能够正确判断内层循环体的执行次数能够正确判断内层循环体的执行次数注意内层循环的初值设定注意内层循环的初值设定能正确处理内层循环与外层循环变量的关系能正确处理内层循环与外层循环变量的关系27 第第5 5章章 循环结构程序设计循环结构程序设计例:输出九九表,输出格式如下:例:输出九九表,输出格式如下:1*1=11*2=22*2=4 1*3=32*3=63*3=91*4=42*4=83*4=124*4=16 1*5=52*5=10 3*5=154*5=205*5=251*6=62*6=123*6=184*6=2
16、45*6=306*6=361*7=72*7=14 3*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=63 8*9=729*9=81for i in range (1,10,1):for j in range(1,i+1,1): print(“%d*%d=%2d ”%(j,i,i*j),end=” ”)print(“”)28 第第5 5章章 循环结构程序设计循环结构程序设计例:找出所有的三位数,要求它的各位数字的例:
17、找出所有的三位数,要求它的各位数字的立方和正好等于这个三位数。例如:立方和正好等于这个三位数。例如:153=13+53+33就是这样的数。就是这样的数。for i in range(1,10): for j in range(0,10): for k in range(0,10): if i*3+j*3+k*3=i*100+j*10+k: print(%d%d%d%(i,j,k)程序运行结果:15337037140729 第第5 5章章 循环结构程序设计循环结构程序设计例:求例:求100200之间的全部素数。之间的全部素数。print(100200之间的素数有:)for m in range(
18、100,200): flag=1 for i in range(2,m): if m%i=0: flag=0 i=m if flag=1: print(m,end= ) 30 第第5 5章章 循环结构程序设计循环结构程序设计有时候我们需要在循环体中提前跳出循环,或者在某种条件满足时,不执行循环体中的某些语句而立即从头开始新的一轮循环,这时就要用到循环控制语句break、continue和pass语句。31 第第5 5章章 循环结构程序设计循环结构程序设计一般格式一般格式break功能功能 break语句用在循环体内,迫使所在循语句用在循环体内,迫使所在循环立即终止,即跳出所在循环体,继环立即终
19、止,即跳出所在循环体,继续执行循环结构后面的语句。续执行循环结构后面的语句。 break expN Y32 第第5 5章章 循环结构程序设计循环结构程序设计n分析:找出分析:找出m与与n中较小的一个,则最大公约数必在中较小的一个,则最大公约数必在1与较小整数的范围内。使用与较小整数的范围内。使用for语句,循环变量语句,循环变量i从较小从较小整数变化到整数变化到1。一旦循环控制变量。一旦循环控制变量i同时能被同时能被m与与n整除,整除,则则i就是最大公约数,然后使用就是最大公约数,然后使用break语句强制退出循语句强制退出循环。环。 m,n=eval(input(请输入两个整数:请输入两个整
20、数:)if m100:break else:y+=x print(y=,y)程序运行结果:y= 250035 第第5 5章章 循环结构程序设计循环结构程序设计pass语句是一个空语句,它不做任何操作,代语句是一个空语句,它不做任何操作,代表一个空操作,在特别的时候用来保证格式或是表一个空操作,在特别的时候用来保证格式或是语义的完整性。例如下面的循环语句:语义的完整性。例如下面的循环语句:for i in range(5): pass该语句的确会循环该语句的确会循环5次,但是除了循环本身之外,次,但是除了循环本身之外,它什么也没做。它什么也没做。36 第第5 5章章 循环结构程序设计循环结构程序
21、设计for letter in Python: if letter = o: pass print(This is pass block) print(Current Letter :, letter)print(End!)程序运行结果:程序运行结果:Current Letter : PCurrent Letter : yCurrent Letter : tCurrent Letter : hThis is pass blockCurrent Letter : oCurrent Letter : nEnd!37 第第5 5章章 循环结构程序设计循环结构程序设计5.5 循环结构程序举例循环结构程
22、序举例 例:利用下面的公式求的近似值,要求累加到最后一例:利用下面的公式求的近似值,要求累加到最后一项小于项小于10-6为止。为止。程序如下:程序如下:import maths=1n=1.0t=1.0pi=0while math.fabs(t)=1e-6: pi=pi+t n=n+2 s=-s t=s/npi=pi*4print(PI=%f%pi)程序运行结果:PI=3.14159138 第第5 5章章 循环结构程序设计循环结构程序设计例:例:“百钱百鸡百钱百鸡”问题。问题。公鸡公鸡5文钱一只,母鸡文钱一只,母鸡3文钱一只,小鸡文钱一只,小鸡3只一文只一文钱,用钱,用100文钱买一百只鸡,其中
23、公鸡、母鸡、文钱买一百只鸡,其中公鸡、母鸡、小鸡都必须要有,问公鸡,母鸡,小鸡要买多少小鸡都必须要有,问公鸡,母鸡,小鸡要买多少只刚好凑足只刚好凑足100文钱?文钱?分析:显然这是一个组合问题,也可以看作是解分析:显然这是一个组合问题,也可以看作是解不定方程的问题,采用列举的方法实现。令不定方程的问题,采用列举的方法实现。令i、j、k分别表示公鸡、母鸡和小鸡的数目。分别表示公鸡、母鸡和小鸡的数目。方法一方法一令令i、j、k的列举范围分别为:的列举范围分别为:i:120(公鸡最多能买(公鸡最多能买20只)只)j:133(母鸡最多能买(母鸡最多能买33只)只)k:1100(小鸡最多能买(小鸡最多能
24、买100只)只)可以采用三重循环逐个搜索。可以采用三重循环逐个搜索。程序如下:程序如下:for i in range(1,21): for j in range(1,34): for k in range(1,101): if i+j+k=100 and i*5+j*3+k/3=100: print(公鸡:公鸡:%d只只,母鸡:母鸡:%d只只,小鸡:小鸡:%d只只%(i,j,k)程序运行结果:公鸡:4只,母鸡:18只,小鸡:78只公鸡:8只,母鸡:11只,小鸡:81只公鸡:12只,母鸡:4只,小鸡:84只在程序中,循环体被执行了2033100=66000次。方法二方法二令令i、j、k的列举范围
25、分别为(保证每种鸡至少买一的列举范围分别为(保证每种鸡至少买一只):只):i:118(公鸡最多能买(公鸡最多能买18只)只)j:131(母鸡最多能买(母鸡最多能买31只)只)k:100-i-k(当公鸡和小鸡数量确定后,小鸡的数量可计算(当公鸡和小鸡数量确定后,小鸡的数量可计算得到)得到)可以采用两重循环逐个搜索。可以采用两重循环逐个搜索。程序如下:程序如下:for i in range(1,19): for j in range(1,32): k=100-i-j if i+j+k=100 and i*5+j*3+k/3=100: print(公鸡:公鸡:%d只只,母鸡:母鸡:%d只只,小鸡:小
26、鸡:%d只只%(i,j,k)在程序中,循环体被执行了在程序中,循环体被执行了1881=558次。次。方法三方法三从题意可得到下列方程组:从题意可得到下列方程组:由方程组可得到式子由方程组可得到式子7i+4j=100。由于。由于i和和j至少为至少为1,因此可知,因此可知i最大为最大为13,j最大为最大为23。方法二的两重循环可改进为以下程。方法二的两重循环可改进为以下程序:序: for i in range(1,14): for j in range(1,24): k=100-i-j if i+j+k=100 and i*5+j*3+k/3=100: print(公鸡:公鸡:%d只只,母鸡:母鸡
27、:%d只只,小鸡:小鸡:%d只只%(i,j,k)该程序的循环体被执行了该程序的循环体被执行了1424=336次。次。方法四方法四 由方法三中的式由方法三中的式7i+4j=100可得:可得:j=(100-7i)/4。观察。观察7i+4j=100,4j同同100都是都是4的倍数,因此的倍数,因此i一定也是一定也是4的倍数。的倍数。有了这些条件,程序实现时只需要对有了这些条件,程序实现时只需要对i进行逐个搜索即可,进行逐个搜索即可,i的的搜索范围为搜索范围为113。采用单层循环进行逐个搜索。采用单层循环进行逐个搜索。程序如下:程序如下:for i in range(1,14): j=(100-7*i)/4 k=100-i-j if i%4=0: print(公鸡:公鸡:%d只只,母鸡:母鸡:%d只只,小鸡:小鸡:%d只只%(i,j,k)该算法程序只循环了该算法程序只循环了13次。次。