Python程序设计基础教程课件 第07章 分支结构_第1页
Python程序设计基础教程课件 第07章 分支结构_第2页
Python程序设计基础教程课件 第07章 分支结构_第3页
Python程序设计基础教程课件 第07章 分支结构_第4页
Python程序设计基础教程课件 第07章 分支结构_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

Python程序设计基础教程

第7章分支结构提纲条件表达式单分支双分支多分支分支嵌套习题学习目标理解分支结构所实现的程序目的理解布尔逻辑在分支结构中的用法理解if…else语句的用法理解通过分支嵌套实现复杂逻辑的方法7.1条件表达式在Python中,条件表达式首先指的是表达一个条件的真(True)和假(False)。例如:假定变量a=10,变量b=20,那么条件表达式a>b的值为False条件表达式a<b的值为True条件表达式a==b的值为False条件表达式的运算结果(值)只有两种:True、False条件表达式在程序中的作用主要是两种:作为条件的值的运算,运算结果为真(True)或假(False)作为分支结构的分支依据关系运算符和布尔表达式关系运算符布尔表达式含义

表达式的值>

a>ba大于b?False<

a<ba小于b?True>=a>=ba大于或等于b?False<=a<=ba小于或等于b?True==a==ba等于b?False!=a!=ba不等于b?True条件表达式的取值特点以下几种情况是被认为与False等价的情况:False值0(或0.0、0j等)空值None、空列表、空元组、空集合、空字典、空字符串、空range对象或其他空迭代对象在选择和循环结构中,条件表达式的值只要不是相当于0或者空,Python解释器均认为与True等价。负值作为条件表达式的时候,Python中也是作为True的。条件表达式中不允许使用赋值运算符“=”。条件表达式的短路求值特点>>>a=true>>>b=false>>>ifaorb:#或运算符ord=a正常运算流程是计算条件表达式aorb的值,然后进行分支判断。但是因为是或操作,而且运算是从左往右及逆行,那么可以分两种情况:如果a为True,那么aorb的值肯定为True,就不用去管b的值了(短路操作)如果a为False,那么再进一步计算aorb的值根据短路求值的特点,在设计条件表达式时,如果能够大概预测不同条件失败的概率,并将多个条件根据“and”和“or”运算的短路求值特性进行组织,可以大幅度提高程序运行效率。7.2单分支单分支结构是只有一个分支的结构单分支结构图分支条件成立前导顺序程序块分支选择后续顺序程序块。。。。。。分支处理程序块分支条件不成立图中,标记为红色

的程序是肯定会运行的程序。当程序从前导顺序程序块运行到分支选择阶段的时候,会先去判断分支条件的值,如果为True,则会进入图中绿色路径,运行分支处理程序块,分支处理程序块运行完毕后,运行后续顺序程序块。单分支结构的程序代码示意如下:if条件表达式:分支语句块这里由四个要素构成:i. if关键字ii. 条件表达式iii. 冒号iv. 分支语句块含义是:如果条件表达式的值为True,则执行分支语句块;如果条件表达式的值为False,则不执行分支语句块;7.3单分支例题例1:写出判断一个数是否能同时被3和8整除的条件语句,并且打印对应的结果。x=int(input('请输入一个数字:'))ifx%3!=0orx%8!=0:print('不')print('\r\n能同时被3和8整除\r\n')例2:输入年份,写代码判断输入的年是否是闰年,并且打印对应的结果。闰年的条件:能被4整除但是不能被100整除或者能够被400整除的年。year=int(input('请输入一个年份:'))if(year%4==0andyear%100==0)oryear%400==0:print(“是闰年\r\n”)例3:通过BMI指数判断身材胖瘦是否正常。用两个变量保存一个人的身高和体重,编程判断这个人的身材体重是否在正常范围。BMI计算公式:BMI=体重(kg)/身高(m)的平方值,BMI在18.5~24.9之间属于正常体重。height=float(input('请输入一个人的身高(m):'))weight=float(input('请输入这个人的体重(kg):'))bmi=weight/(height**2)if18.5<bmi<24.9:print('\r\n此人身材正常')ifbmi>=24.9:print('\r\n此人身材偏胖')ifbmi<=18.5:print('\r\n此人身材偏瘦')7.3双分支双分支结构是有二个分支的结构双分支结构图标记为红色的程序是肯定会运行的程序。当程序从前导顺序程序块运行到分支选择阶段的时候,会先去判断分支条件的值,如果为True,则会进入图中绿色

路径,运行分支处理程序块①,分支处理程序块①运行完毕后,运行后续顺序程序块。如果为False,则会进入图中黄色路径,运行分支处理程序块②,分支处理程序块②运行完毕后,运行后续顺序程序块分支条件成立前导顺序程序块分支选择分支处理程序块①分支条件不成立后续顺序程序块。。。。。。分支处理程序块②双分支结构的程序代码示意如下:if条件表达式:分支语句块①else:分支语句块②这里由七个要素构成:i. if关键字ii. 条件表达式iii. 冒号①iv. 分支语句块①v. else关键字vi. 冒号②分支语句块②含义是:如果条件表达式的值为True,则执行分支语句块①;如果条件表达式的值为False,则执行分支语句块②;7.5双分支例题例4:双分支条件表达式中,计算条件遵循从左到右的顺序,在一些情况下,会体现出惰性求值的特点。①x=math.sqrt(9)if5>3elserandom.randint(1,100)#此时还没有导入math模块运行时报错:没有定义mathTraceback(mostrecentcalllast):File"<pyshell#23>",line1,in<module>x=math.sqrt(9)if5>3elserandom.randint(1,100)NameError:name'math'isnotdefined②importmathx=math.sqrt(9)if5>3elserandom.randint(1,100)能够运行:#此时还没有导入random模块,但由于条件表达式5>3的值为True,所以可以正常运行③importmathx=math.sqrt(9)if2>3elserandom.randint(1,100)运行时报错:没有定义random,此时还没有导入random模块,由于条件表达式2>3的值为False,需要计算第二个表达式的值,因此出错Traceback(mostrecentcalllast):File"<pyshell#26>",line1,in<module>x=math.sqrt(9)if2>3elserandom.randint(1,100)NameError:name'random'isnotdefined④importmathimportrandomx=math.sqrt(9)if2>3elserandom.randint(1,100)正常运行:程序的运行条件是完备的。例5:面试资格确认。根据应聘者的年龄、主修专业、学校等级,来决定是否录用。age=24subject="计算机"college="非重点"if(age>25andsubject=="电子信息工程")or\(college=="重点"andsubject=="电子信息工程")or\(age<=28andsubject=="计算机"):print("恭喜,你已获得我公司的面试机会!")else:print("抱歉,你未达到面试要求")例6:用户输入若干个分数,求所有分数的平均分。每输入一个分数后询问是否继续输入下一个分数,回答“yes”就继续输入下一个分数,回答“no”就停止输入分数。endFlag='yes's=0whileendFlag.lower()=='yes':x=input("请输入一个正整数:")x=eval(x)ifisinstance(x,int)and0<=x<=100:s=s+xelse:print('不是数字或不符合要求')endFlag=input('继续输入?(yesorno)')print('整数之和=',s)例7:编写程序,判断今天是今年的第几天。importtimedate=time.localtime()year=date[0]month=date[1]day=date[2]day_month=[31,28,31,30,31,30,31,31,30,31,30,31]ifyear%400==0or(year%4==0andyear%100!=0):#判断是否为闰年day_month[1]=29ifmonth==1:print(day)else:print(sum(day_month[:month-1])+day)7.6多分支多分支结构是有大于二个分支的结构多分支结构图多分支程序的执行步骤为:当程序从前导顺序程序块运行到if分支选择阶段的时候,会先去判断分支条件的值,如果为True,则会进入图中绿色路

径,运行分支处理程序块①,分支处理程序块①运行完毕后,运行后续顺序程序块。如果为False,则会进入图中深绿色路径,进行elif分支选择。可以有多个elif分支选择,每个elif分支选择都有自己独立的分支条件。如果elif分支条件为True,则会进入图中绿色路径,运行分支处理程序块②到分支处理程序块N-1。运行完毕后,运行后续顺序程序块。如果所有的elif分支选择条件都为False,则程序运行到else分支处理阶段,运行程序块N,运行完毕后,运行后续顺序程序块。前导顺序程序块

分支条件成立if分支分支处理程序块①分支条件不成立后续顺序程序块。。。。。。分支条件不成立分支条件不成立elif分支else分支分支条件成立分支处理程序块②分支条件成立分支处理程序块N可以有多个elif分支多分支结构的程序代码示意如下:if条件表达式1:分支语句块①elif条件表达式2:分支语句块②………elif条件表达式N-1:分支语句块N-1Else:分支语句块N这里由11个要素构成:i. if关键字ii. 条件表达式1iii. 冒号①iv. 分支语句块①v. elif关键字vi. 条件表达式vii. 冒号viii. 分支语句块ix. else关键字x. 冒号Nxi. 分支语句块N含义是:如果if条件表达式的值为True,则执行分支语句块①;如果elif条件表达式的值为True,则执行对应的分支语句块;如果所有elif条件表达式的值均为False,则执行else分支语句块N;多分支的等效表达if条件表达式1:

分支语句块①

else:if条件表达式2:

分支语句块②

else:if条件表达式3:

分支语句块③

else:if条件表达式4:

分支语句块④

else:

分支语句块⑤

=if条件表达式1:

分支语句块①

elif条件表达式2:

分支语句块②

elif条件表达式3:

分支语句块③

elif条件表达式4:

分支语句块④

else:

分支语句块⑤

7.7多分支例题例8:下面的函数代码演示了利用多分支选择结构将成绩从百分制变换到等级制的用法。deffunc(score):ifscore>100:return'wrongscore.must<=100.'elifscore>=90:return'A'elifscore>=80:return'B'elifscore>=70:return'C'elifscore>=60:return'D'elifscore>=0:return'E'else:return'wrongscore.must>0'例9:数码管可以显示数字或者特定的字符,外加小数点。这个例题我们看一下如何用程序来控制控制数码管

图中的数码管是由8个不同形状的LED组成,每个都可以独立控制亮和灭。当ABCDEFGDp位置为高电平的时候,对应的LED就回导通发光。分析LED字符和控制表的对应关系如表所示:的显示。要显示的数字或字符要点亮的LED要控制为高电平的信号0abcdefABCDEF1bcBC2abgedABGED3abgcdABGCD4fgbcFGBC5afgcdAFGCD6afgcdeAFGCDE7abcABC8abcdefgABCDEFG9abcdfgABCDFGdef

display_digit(data): ifdata==0: A,B,C,D,E,F,G,Dp=1,1,1,1,1,1,0,0 elifdata==1: A,B,C,D,E,F,G,Dp=0,1,1,0,0,0,0,0 elifdata==2: A,B,C,D,E,F,G,Dp=1,1,0,1,1,0,1,0 elifdata==3: A,B,C,D,E,F,G,Dp=1,1,1,1,0,0,1,0 elifdata==4: A,B,C,D,E,F,G,Dp=0,1,1,0,0,1,1,0 elifdata==5: A,B,C,D,E,F,G,Dp=1,0,1,1,0,1,1,0 elifdata==6: A,B,C,D,E,F,G,Dp=1,0,1,1,1,1,1,0 elifdata==7: A,B,C,D,E,F,G,Dp=1,1,1,0,0,0,0,0 elifdata==8: A,B,C,D,E,F,G,Dp=1,1,1,1,1,1,1,0 elifdata==9: A,B,C,D,E,F,G,Dp=1,1,1,1,0,1,1,0 else: A,B,C,D,E,F,G,Dp=0,0,0,0,0,0,0,0例10:根据腿的数量对动物进行分类。legs=int(input())iflegs==0: print(“没有腿的动物有:蟒蛇、眼镜蛇、滑鼠蛇、五步蛇、蝮蛇、银环蛇、王锦蛇、乌梢蛇、长吻海蛇、黑曼巴蛇、银环蛇、海马、黄鳝、鲤鱼、鲫鱼、鲟鱼、草鱼等。\r\n”)eliflegs==2: print(“2条腿腿的动物有:袋鼠、乌鸦、燕子、老鹰、丹顶鹤、鸵鸟、企鹅、鸸鹋、鹤鸵、美洲鸵、几维、恐鸟、红喉潜鸟、风头䴙䴘、赤颈䴙䴘、短尾信天翁、黑叉尾海燕、褐鹈鹕、蓝脚鲣鸟、普通鸬鹚、非洲秃鹳、黑鹳、鲸头鹳。\r\n”)eliflegs==4: print(“4条腿的动物有:老虎、狮子、豹、大象、马、牛、羊、老鼠、狗、猫、兔子、猪、斑马、河马、狼、长颈鹿、陆龟、变色龙、鳄鱼、蜥蜴。\r\n”)eliflegs==6: print(“6条腿的动物有:甲虫、蟋蟀、蝗虫、蚱蜢、螳螂、蜻蜓、苍蝇、知了、蚊子、蚂蚁、蝴蝶、蜜蜂、天牛等绝大部分昆虫,都是六条腿的。\r\n”)eliflegs==8: print(“8条腿的动物有:蜘蛛、螃蟹、蚁蛛、蚂蚁、蜘蛛、章鱼、八爪鱼、水母、墨鱼、蝎子。\r\n”)eliflegs>8: print(“比8条腿还要多的动物有:地蜈蚣,马陆,千足虫。\r\n”)else: print(“这种动物我还没见过呢。\r\n”)7.8

分支嵌套程序的顺序结构实际的程序中,通常是顺序结构、分支结构、循环结构的组合,可以由不同层级的组合来包含堆叠构成。在编写程序的时候,每个独立的分支语句,实际上都是一个独立的程序语句,都可以作为顺序结构的组成部分顺序结构程序段

单分支语句双分支语句其它语句多分支语句顺序结构程序段分支嵌套

分支语句可以作为分支结构的分支程序块的内含语句来使用,这种情况叫做分支嵌套。if表达式1:

语句块1if表达式2:#双分支嵌套语句块2else:

语句块3else:if表达式4:#单分支嵌套语句块47.9分支嵌套例题例11:根据分数给出成绩等级,采用双分支嵌套。deffunc(score): degree='DCBAAF' ifscore>100orscore<0: return'wrongscore.mustbetween0and100.' else: index=(score-60)//10 ifindex>=0: returndegree[index] else: returndegree[-1]例12:根据输入的系数,求一元二次方程的根,采用多分支嵌套。a,b,c=eval(input("请输入一元二次方程的三个系数,以逗号隔开:"))ifa==0:print("不是一元二次方程")else:delta=b*b-4*a*cifdelta==0:print("两个相同实根")elifdelta>0:print("两个不同实根")else:print("有不同虚根")例13:根据三角形的三条边的边长,判断三角形是否为直角三角形。此处考虑输入的边长为整数,因为对于小数,由于计算精度的误差,有时候得出的结果并不正确。采用单分支、双分支嵌套。importmatha,b,c=eval(input("输入三角形的三条边,以逗号隔开:"))ifa+b>canda+c>bandb+c>a:#逻辑运算符构成的条件表达式作为分支条件mark=0ifa==borb==cora==c:#逻辑运算符构成的条件表达式作为分支条件mark=1ifa==b==c:print("等边三角形",end="")else:print("等腰三角形",end="")ifa*a+b*b==c*cora*a+c*c==b*borc*c+b*b==a*a:mark=1print("直角三角形",end="")ifmark=0: print("一般三角形",end="")else:print("不能构成三角形",end="")例14:用随机数法求圆周率:设定一个半径为1的圆(为正方形内切圆),圆心为原点,同心边长为2的正方形,采用随机函数撒点,统计落在圆内几率,根据几率来计算圆周率。采用单分支嵌套循环语句。importrandoms=eval(input("请输入循环次数:"))#单位正方形内总的撒点数

n=0#n表示1/4圆内部的撒点数foriinrange(1,s+1):x,y=random(),random()#撒点的x和y坐标ifx*x+y*y<=1:#如果点在圆的内部则计数n=n+1pi=4*(n/s)#计算piprint("圆周率是:{}".format(pi))例15:求2-100之间所有素数。判断一个整数n是否为一个素数的方法,就是用2~n-1的每个数去除它,有整数因子则不是素数,无整数因子,则是素数。采用单分支嵌套循环语句。importmathn=eval(input("请输入一个整数:"))forn

温馨提示

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

最新文档

评论

0/150

提交评论