python程序设计及上机实验教程第6章Python流程控制_第1页
python程序设计及上机实验教程第6章Python流程控制_第2页
python程序设计及上机实验教程第6章Python流程控制_第3页
python程序设计及上机实验教程第6章Python流程控制_第4页
python程序设计及上机实验教程第6章Python流程控制_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

程序设计及上机实验主讲:杨薇

PythonPython流程控制第6章6.1程序控制结构6.2顺序结构6.3择结构6.4循环结构6.5跳转语句6.6案例实战6.7课后习题程序执行的三种方式顺序结构选择结构循环结构break和continue本章重点选择结构的嵌套for…else,while…else的使用方法本章难点结构化程序设计的概念最早由艾兹格.迪科斯彻(E.W.Dikstra)在1965年提出。该概念的提出是软件发展的一个重要里程碑,它的主要观点是采用“自顶向下、逐步求精”及模块化的程序设计方法。在结构化程序设计中,主要使用3种基本控制结构来构造程序,即顺序结构、选择结构和循环结构。使用结构化程序设计方法编写出来的程序在结构上具有以下特点:(1)以控制结构为单位,每个模块都有一个入口和一个出口;(2)能够以控制结构为单位,从上到下顺序地阅读程序文本;(3)由于程序的静态描述与执行时的控制流程容易对应,所以阅读者能够方便、正确地理解程序的动作。程序控制结构6.1Python程序具有三种典型的控制结构,如图6-1所示。6.1.1Python程序的三种控制结构程序控制结构6.1程序控制结构6.1(1)顺序结构该结构在程序执行时,按照语句的顺序,从上而下,一条一条顺序执行,是结构化程序中最简单的结构。(2)选择结构选择结构是程序根据条件判断结果而选择不同向前执行路径的一种运行方式。又称为分支结构,分支语句根据一定的条件决定执行哪一部分的语句序列。(3)循环结构使用一个语句组根据一定的条件执行若干次。采用循环结构可以实现有规律地重复计算处理。程序流程图用一系列图形、流程线和文字说明描述程序的基本操作和控制流程,它是程序分析和过程描述的最基本方式。流程图的基本元素包括7种,如图6-2所示。6.1.2程序流程图程序控制结构6.16.1.2程序流程图程序控制结构6.1(1)起止框:表示一个程序的开始和结束;(2)判断框:判断一个条件是否成立,并根据判断结果选择不同的执行路径;(3)处理框:表示一组处理过程;(4)输入输出框:表示数据输入或者结果输出;(5)连接点:将多个流程图连接到一起;(6)流向线:以带箭头直线或者曲线形式指示程序的执行路径;(7)注释框:增加程序的解释。图6-2流程图的基本元素6.1.3条件表达式程序控制结构6.1在选择结构和循环结构中,常常需要对条件表达式的值进行判断,来确定下一步的执行流程。在Python中,条件表达式的构成要比其他语言灵活得多,单个常量、变量或者任意合法表达式(包括函数调用表达式)都可以作为条件表达式。在条件表达式中可以使用算术运算符、关系运算符、逻辑运算符、位运算符和矩阵相乘运算符等。6.1.3条件表达式程序控制结构6.11.条件表达式值为False的情况False、0(0.0、0j)、None、空列表、空元组、空集合、空字典、空字符串、空range对象或其他空迭代对象,Python解释器均认为等价于False。2.条件表达式值为True的情况条件表达式的值只要不是False,Python均认为与True等价。Python不同于其他语言,条件表达式中不能使用赋值运算符“=”,否则会抛出异常。顺序结构6.2若程序中的语句按各语句出现位置的先后次序执行,称之为顺序结构,参见图6-1。在图6-1(a)中先执行语句块A,再执行语句块B,语句块之间是顺序执行关系。例6-1顺序结构示例:输入一个三角形三条边的边长(为简单起见,假设这三条边可以构成三角形),计算三角形的面积。提示:三角形面积=,其中a、b、c是三角形三条边的边长,h是三角形周长的一半。顺序结构6.2图6-3流程图顺序结构6.2例6-1的代码如下:importmatha=float(input("请输入三角形的边长a:"))b=float(input("请输入三角形的边长b:"))c=float(input("请输入三角形的边长c:"))h=(a+b+c)/2area=math.sqrt(h*(h-a)*(h-b)*(h-c))print("三角形的3边分别是a,b,c:",a,b,c)print("三角形的面积是:",area)顺序结构6.2程序运行结果如下:请输入三角形的边长a:5请输入三角形的边长b:6请输入三角形的边长c:7三角形的3边分别是a,b,c:5.06.07.0三角形的面积是:14.696938456699069选择结构6.3Python通过选择语句if、if...else、if...elif...else来实现程序的选择结构。选择结构分为单分支选择结构、双分支选择结构和多分支选择结构,三种结构的流程图如图6-4所示。图6-4选择结构的流程图选择结构6.31.单分支选择结构单分支选择结构是最简单的一种形式,Python提供了if语句来支持单分支结构。其语法结构如下所示,:if条件表达式:满足条件时要执行的语句块其中冒号“:”是不可缺少的,if为Python关键字,当条件表达式的值为True或其他等价值时,条件得以满足执行冒号后面的语句块。当条件表达式的值为False时,语句块不会被执行。选择结构6.3例6-2,单分支选择结构示例。math=65print('开始进入if语句并判断表达式的值是否为True')ifmath>=85:#条件表达式

print('数学成绩优秀')#if语句块,满足条件执行,否则不执行print('if语句运行结束')#if语句结构外语句程序运行结果如下:开始进入if语句并判断表达式的值是否为Trueif语句运行结束注意:if语句中关系运算符可以连用,如if60<=math<=70;在Python中使用“=”表示赋值语句,“==”表示相等,if语句中要使用“==”;在每个条件表达式后面要使用冒号“:”来表示语句块的开始;使用缩进来划分语句块,同一段语句块中的每条语句都要保持同样的缩进。选择结构6.32.双分支选择结构单分支结构可以决定条件为真时要做的事情,无法决定条件为假时如何做,这时就需要使用双分支选择结构的if...else语句。其语法结构如下:if条件表达式:满足条件时要执行的语句块1else:不满足条件时要执行的语句块2当表达式值为True或者其他等价值时,执行语句块1,否则执行语句块2。选择结构6.3例6-3,判断一个数是奇数还是偶数。x=6ifx%2==0:print(x,"是偶数")else:print(x,"是奇数")运行结果如下:6是偶数选择结构6.3>>>x=8>>>action="偶数"ifx%2==0else"奇数">>>print(x,"是"+action)8是偶数Python还引入了条件表达式,作为一种轻量级的双分支选择结构,类似于C语言中的三目运算符。条件表达式的语法如下:value1ifconditionselsevalue2当条件表达式conditions的值为True时,整个表达式的值为value1,否则表达式的值为value2。此外,在value1和value2中还可以使用复杂表达式,包括函数调用和基本输入输出语句,示例如下:选择结构6.33.多分支选择结构如果有多个情况需要进行选择的话,使用上面两种结构已经无法解决。这时就需要使用多分支结构if...elif...else语句,通过它可以对if语句中的多个条件进行判断,然后执行相应的语句块。if...elif...else语句用法如下:if条件表达式1:满足条件1时要执行的语句块1elif条件表达式2:满足条件2时要执行的语句块2elif条件表达式3:满足条件3时要执行的语句块3elif条件表达式4满足条件4时要执行的语句块4else:不满足上述条件时执行的语句块5选择结构6.3例6-4,输入学生的考试成绩,并输出成绩属于哪个等级。score=int(input("请输入你的分数:"))ifscore>=90:print("你的等级是:A")elifscore>=80:print("你的等级是:B")elifscore>=60:print("你的等级是:C")elifscore>=40:print("你的等级是:D")elifscore>=0:print("你的等级是:E")else:print("祝贺你已经完成成绩分级。")分析:分数90分及以上为A级,80-90之间为B级,60-80之间为C级,40-60之间为D级,40分以下为E级。选择结构6.3运行结果如下:=======RESTART:C:/Users/Administrator/Desktop/linshi.py=============请输入你的分数:95你的等级是:A======RESTART:C:/Users/Administrator/Desktop/linshi.py=============请输入你的分数:79你的等级是:C======RESTART:C:/Users/Administrator/Desktop/linshi.py=============请输入你的分数:52你的等级是:D选择结构6.3注意:不管有几个分支,程序执行了一个分支以后,其余分支不再执行;如果分支中有多个表达式同时满足条件,则只执行第一条与之匹配的语句块;if...elif...else允许省略else语句,表示前面所有条件都不满足时,不执行任何动作;elif必须和if一起使用,否则程序会出错;多个条件之间的不能相互包含。选择结构6.34.选择结构的嵌套if语句、if...else语句和if...elif...else语句之间可以相互嵌套。选择结构嵌套时一定要注意同一层次的语句缩进要保持一致。if语句嵌套就是在一个选择结构的语句块中包含另一个选择结构,其用法如下:if条件表达式1:满足条件1时要执行的语句块if条件表达式2:满足条件2时要执行的语句块2else不满足条件2时要执行的语句块3else:不满足条件1时要执行的语句块4选择结构6.3例6-5,判断是否为酒后驾驶。假设规定车辆驾驶员的血液酒精含量小于20mg/100ml不构成酒驾,酒精含量大于或等于20mg/100ml为酒驾,酒精含量大于或等于80mg/100ml为醉驾。alcohol=int(input("请输入驾驶员每100ml血液酒精的含量:"))ifalcohol<20:print("驾驶员不构成酒驾")else:ifalcohol<80:print("驾驶员已构成酒驾")else:print("驾驶员已构成醉驾")运行结果为:请输入驾驶员每100ml血液酒精的含量:100驾驶员已构成醉驾循环结构6.4在日常生活或者程序处理中经常要遇到重复处理的问题,Python提供了while和for两种循环控制结构,用来处理需要进行的重复操作,直到满足某些特定条件。while循环一般用于循环次数难以提前确定的情况,也可以用于循环次数确定的情况。for循环一般用于循环次数可以提前确定的情况,尤其适用于枚举或者遍历序列、迭代对象中元素的场合。for循环写的代码通常更加清晰简单,因此编程时建议优先使用for循环。相同或不同的循环结构之间可以相互嵌套,也可以和选择结构嵌套使用,用来实现更为复杂的逻辑。循环结构6.4while循环和for循环的执行流程如图6-6所示。循环结构6.41.while循环while循环是用一个表达式来控制循环的,它的一般形式为:while条件表达式:循环体当表达式的值为True或其他等价值时,执行循环体,当表达式的值为False或其他等价值时,退出循环,不执行循环体。如果条件表达式的值一直为True,循环将会无限地执行下去。所以写while循环时,一定要注意不能出现死循环,每次循环体执行完后,都要越来越接近条件表达式为False的情况。例6-6,用while循环语句实现计算1-99的整数和。n=1#定义一个自变量n用来计数sums=0#定义一个变量sums用来存储和while(n<=99):sums+=nn+=1print("1-99的整数和为:",sums)运行结果为:1-99的整数和为:4950循环结构6.4循环结构6.42.for循环for循环语句是最常用的循环语句,一般用在循环次数已知的情况下,for循环常见用法如下:for循环变量in可迭代对象或迭代器:循环体循环变量从可迭代对象的第1个元素开始,逐个进行遍历,直到最后一个元素取完为止。例6-7,输出所有“水仙花数”。foriinrange(100,1000):a=i%10#取得该数字的个位数

b=i//10%10#取得该数字的十位数

c=i//100#取得该数字的百位数

if(i==a**3+b**3+c**3):print(i)153370371407分析:所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数字本身,例如153是一个水仙花数,因为13+53+33=153。运行结果为:循环结构6.4循环结构6.43.else子句while循环和for循环都可以带else子句。如果循环是因为条件表达式不成立而自然结束(不是因为执行了break而提前结束),则执行else结构中的语句;如果循环是因为执行了break语句而提前结束,则不执行else结构中的语句。(1)for...else语法形式如下:for循环变量in可迭代对象或迭代器:循环体

else:代码块(2)while...else语法形式如下:while条件表达式:循环体else:代码块例6-8,while...else语句和for...else语句的应用示例。count=0#初始化循环控制变量whilecount<5:#条件表达式的值为True时,执行循环体

print(count,"islessthan5")#注意缩进要一致

count+=1#循环控制变量自增,避免死循环else:print(count,"isnotlessthan5")#表达式的值为False时执行else语句块#第2个程序print("****************")name=["Lily","University"]#定义一个列表forcinname:#遍历列表中的每一个元素

ifc=="Lily":print("founded!")breakelse:print("Thesearchiscomplete")#遍历完列表的元素后执行print()print()循环结构6.4程序运行结果如下:0islessthan51islessthan52islessthan53islessthan54islessthan55isnotlessthan5****************founded!循环结构6.4循环结构6.44循环嵌套循环嵌套就是一个循环体包含另一个完整的循环结构,而在这个完整的循环体内可以嵌套其他的循环结构。循环嵌套很复杂,在for循环语句、while循环语句中都可以嵌套,并且他们之间也可以相互嵌套。(3)在while循环中嵌套for循环,格式为:while表达式:

for循环变量in可迭代对象或迭代器:语句块2语句块1(4)在for循环中嵌套while循环,格式为:for循环变量in可迭代对象或迭代器:while表达式:语句块2语句块1(1)在while循环中嵌套while循环,格式为:while表达式1:

while表达式2:语句块2语句块1(2)在for循环中嵌套for循环,格式为:for循环变量1in可迭代对象或迭代器1:for循环变量2in可迭代对象或迭代器2:语句块2语句块1例6-9,编写程序打印九九乘法表。print("九九乘法表")i=1whilei<10:j=1whilej<=i:print("%d*%d=%-2d"%(i,j,i*j),end='')j+=1print("\n")i+=1运行效果如下:九九乘法表循环结构6.4循环结构6.45.循环结构的优化在编写循环语句时,应该尽量减少循环内部不必要的计算,将与循环变量无关的代码尽可能放到循环体的外面。对于多重循环,应尽量减少内层循环中不必要的计算,尽可能向外层循环靠。跳转语句6.51.break跳转语句break语句可以用在for和while循环中,用于终止循环。当程序执行到break语句时,跳出并结束当前整个循环,执行循环后的语句。(1)在while循环语句中使用break跳转语句的形式为:while表达式1:语句块

if表达式2:

break(2)在for循环语句中使用break跳转语句的形式为:for循环变量in可迭代对象或迭代器:语句块if表达式:

breakPython语言支持多种跳转语句,如break跳转语句、continue跳转语句和pass语句。例6-10同学录里存着很多同学,现查找是否有“张明”这位同学,如果找到就停止继续查找并输出这位同学,如果没有找到就输出没有该为同学。names=["张青","李平","张明","王伟","阳阳","郑正"]foriinnames:ifi=="张明":#如果找到张明,循环就强制结束

print("找到",i)breakelse:#如果循环正常结束就执行该语句,否则就不会被执行

print("没有找到张明")运行结果为:找到张明跳转语句6.5跳转语句6.52.continue跳转语句continue跳转语句和break跳转语句不同,break跳转语句跳出整个循环,而continue跳转语句跳出本次循环,也就是说,程序遇到continue跳转语句,会跳过当前循环的剩余语句,然后继续进行下一轮循环。(1)在while循环语句中使用continue跳转语句的形式为:while表达式1:语句块

if表达式2:

continue(2)在for循环语句中使用continue跳转语句的形式为:for循环变量in可迭代对象或迭代器:语句块if表达式:

continue例6-11,计算从0到100所有奇数的和。sums=0x=0whileTrue:x=x+1ifx>100:breakifx%2==0:#x为偶数,则不求和

continuesums+=xprint("0-100所有奇数的和为:",sums)执行结果为:0-100所有奇数的和为:2500跳转语句6.5跳转语句6.53.pass语句Python中还有一个pass语句,表示空语句,它不做任何事情,一般起到占位作用。例6-12,应用for循环输入1-10的偶数,在不是偶数时应用pass语句占个位置,方便以后对不是偶数的数进行处理。foriinrange(1,11):ifi%2==0:print(i,end="")else:pass运行结果为:246810案例实战6.6例6-13,有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?分析:可填在百位、十位和个位的数字都是1、2、3、4,组成所有的排列后再去掉不满足条件的排列。案例实战6.6all=[]#定义一个列表用于存储所有满足调整的数foriinrange(1,5):forjinrange(1,5):forkinrange(1,5):if(i!=k)and(i!=j)and(j!=k):num=str(i)+str(j)+str(k)#将满足条件的数字组合成三位数

all.append(num)print(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论