Python-教程-chapter7

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

控制结构条件语句222单分支决策语法ifcondition:body–condition:布尔表达式–body:语句序列语义:计算condition的真假–若为真,则执行body,并把控制转向下一条语句;–若为假,则直接把控制转向下一条语句33条件表达式condition是一个表达式,称为布尔表达式–结果为True/False(type:boolean)有些语言用0表示false,用1或非零值表示真.44条件表达式简单条件:比较两个表达式expr1rel-opexpr2–关系运算:,=,==(等于,=赋值),=,,!=–数值比较–字符串比较:按字典序字母序由编码(ASCII等)决定.如:大写字母在小写字母前.复杂条件:详见后555编程实例:有条件执行程序回顾:Python模块分为–程序/脚本:可直接执行–库:不能直接执行666编程实例:有条件执行程序回顾:Python模块分为–程序/脚本:可直接执行模块最后一行是main(),即启动程序的语句执行方式–直接执行Windows下双击模块图标DOS命令行下:pythonmyfile.py–在会话或其他程序中import并执行–库:不能直接执行777编程实例:有条件执行程序回顾:Python模块分为–程序/脚本:可直接执行–库:不能直接执行模块中没有main()一行被其他程序import但不执行888编程实例:有条件执行程序(续)混合型模块:既能作为独立程序直接执行,又能作为库被其他程序import而不执行.例如:graphics.py#myfile.pydefmain():…defother():…if__name__==‘__main__’:main()•import一个模块时,Python将该模块中的一个特殊变量__name__设置为该模块的名字;•直接执行模块时,__name__被设置为’__main__’两分支决策语法if条件:语句序列1else:语句序列2语义–若条件为真,执行语句序列1,控制转向下一条语句;–否则执行语句序列2,控制转向下一条语句9编程实例:完善quadratic.pyquadratic会产生运行错误–(b2-4ac0)时,程序崩溃quadratic2:增加条件ifdiscrim=0:…–仍不好:未告知用户无解的情况10编程实例:完善quadratic.pyquadratic3a:增加条件ifdiscrim=0:…ifdiscrim0:…Quadratic3b:增加条件ifdiscrim=0:…else:…11多分支决策语法if条件1:语句序列1elif条件2:语句序列2...elif条件n语句序列nelse缺省语句序列12多分支决策语义:–找到第一个为真的条件并执行对应语句序列,控制转向下一条语句;–若无,则执行else下的语句序列,控制转向下一条语句13编程实例:完善quadratic.pyquadratic3:未考虑重根情形,即应区分判别式0,=0,0三种情形.–解决方法一:用嵌套if-elseifdiscrim0:else:ifdiscrim=0:else:对三分支尚可,但对更多分支不是好方法.14编程实例:完善quadratic.pyquadratic3:未考虑重根情形,即应区分判别式0,=0,0三种情形.–解决方法一:用嵌套if-else–解决方法二:用if-elif-elsequadratic4.py15程序运行错误的处理常见代码:利用if判断某种运行错误是否发生do_sth()ifsome_error:do_sth_else()16程序运行错误的处理有的函数利用返回特殊值来表示某种运行错误发生–例如:设计otherSqrt(),若无平方根返回-1.ifotherSqrt(b*b4*a*c)0:17例外处理程序设计问题:当程序中充斥着这样的错误检测代码时,解决问题的算法反而不明显了解决办法:例外处理机制–程序员编写捕获并处理运行时错误的代码,而不是在每一步都去检测–Python提供try...except...–可使程序不因运行错误而崩溃,尽量让用户不受意外结果的困扰18例外处理语句语法try:bodyexceptErrorType1:handler1exceptErrorType2:handler2...except:...19例外处理语句语义:–执行body–若无错,控制转try…except后面的下一语句;–若有错,查找匹配该错误的except子句,找到则执行相应的处理程序找不到则程序崩溃,系统报错说明:例外,不一定是错误。有的时候是需要特别处理的事件。raiseMyExp20编程实例:完善quadratic.py用例外处理语句来捕获math.sqrt的溢出错误(quadratic5.py)try:...exceptValueError:...错误类型:从系统报错信息中可得–如ValueError,TypeError,NameError等对quadratic进一步完善为可捕获各种错误类型(quadratic6.py)21编程实例:求三数之最大者设计策略1:每个数都与其他所有数比较if?:max=x1elif?:max=x2elif?:max=x322x1=x2=x3行吗?注:Python确实允许这种形式的比较!编程实例:求三数之最大者写条件时要问自己两个问题,即“当且仅当”–条件真时,相应语句序列是所需的吗?注意临界值–每当语句序列是所需的,条件总为真吗?比较容易出错例如:凡是x1最大的时候,这个语句都执行吗?23编程实例:求三数之最大者设计策略1:每个数都与其他所有数比较if?:max=x1elif?:max=x2elif?:max=x3条件真时,相应语句序列是所需的吗?每当语句序列是所需的,条件总为真吗?24x1=x2=x3行吗?注:Python确实允许这种形式的比较!是否!编程实例:求三数之最大者(续)语句max=x1实际只需要条件x1=x2和x1=x3,而不管x2与x3大小如何ifx1=x2andx1=x3:max=x1elifx2=x1andx2=x3:max=x2else:max=x325编程实例:求三数之最大者(续)此法中,各分支彼此独立,但实际上一个分支的信息对其他分支是有用的!–如:x1=x2,x1=x3时对更多数据的比较,此法不好–需要更多的布尔表达式,而且更复杂26编程实例:求三数之最大者(续)27好处:只需两次比较,效率高.坏处:结构复杂,复杂度随n爆炸式增长(指数级)编程实例:求三数之最大者(续)设计策略2:判定树ifx1=x2:ifx1=x3:max=x1else:max=x3else:ifx2=x3:max=x2else:max=x328编程实例:求三数之最大者(续)设计策略3:顺序处理,记录当前最大值.–设计算法时的一个好的起点:问自己会如何做?当n=100时你会如何找出最大值?(选个大苹果)max=x1ifx2=max:max=x2ifx3=max:max=x3效率高(时间复杂度:线性(多项式级))易读可扩展:maxn.py29编程实例:求三数之最大者(续)设计策略4:利用Python–内部函数max(x1,x2,...,xn)defmain():x1,x2,x3=input(“enter3numbers:“)print“themaxis”,max(x1,x2,x3)30编程实例:求三数之最大者(续)经验小结–给定问题,有多种解决方法不要只凭第一反应去匆忙编程,要三思首先要算法正确,然后要简单,清晰,高效,可扩展,漂亮.–问自己会如何解决问题–追求一般性–借用现成算法(站在巨人的肩膀上)31作业EX7.6(P116)153333End

1 / 33
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功