python课件Chapter07-ch

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

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

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

资源描述

控制结构——条件语句222单分支判定•语法ifcondition:body–condition:布尔表达式–body:语句序列.•语义:计算condition的真假.若为真,则执行body,并把控制转向下一条语句;若为假,则直接把控制转向下一条语句.33条件表达式•简单条件:比较两个表达式expr1关系运算符expr2–关系运算:,=,==,=,,!=–数值比较–字符串比较:按字典序.•字符序由编码(ASCII等)决定.如:大写字母在小写字母前.•condition是一个表达式,称为布尔表达式.–结果为True/False•有些语言也用0表示false,用1或非零值表示true.–复杂条件:详见后.444编程实例:有条件执行模块•回顾:Python模块分为–独立程序:可直接执行•模块最后一行是main()之类的程序入口•可直接执行–Windows下双击模块文件图标–DOS命令行下:pythonmyfile.py•也可在Python会话环境中import并执行–库:不能直接执行•模块中没有程序入口•可被其他程序import但不执行555编程实例:有条件执行模块(续)•混合型模块:既能作为独立程序直接执行,又能作为库被其他程序import而不执行.#myfile.pydefmain():…defother():…if__name__=='__main__':main()•import一个模块时,Python将该模块中的一个特殊变量__name__设置为该模块的名字;•直接执行模块时,__name__被设置为'__main__'两分支判定•语法if条件:语句序列1else:语句序列2•语义–若条件为真,执行语句序列1,控制转向下一条语句;否则执行语句序列2,控制转向下一条语句.6编程实例:完善quadratic.py•quadratic会产生运行错误•quadratic2:增加条件ifdiscrim=0:…–仍不好:未告知用户无解的情况•quadratic3:增加条件ifdiscrim=0:…else:…7PythonProgramming,2/e8编程实例:quadratic3-二条分支判断#quadratic3.py#Aprogramthatcomputestherealrootsofaquadraticequation.#Illustratesuseofatwo-waydecisionimportmathdefmain():printThisprogramfindstherealsolutionstoaquadratic\na,b,c=eval(input(Pleaseenterthecoefficients(a,b,c):))discrim=b*b-4*a*cifdiscrim0:print(\nTheequationhasnorealroots!)else:discRoot=math.sqrt(b*b-4*a*c)root1=(-b+discRoot)/(2*a)root2=(-b-discRoot)/(2*a)print(\nThesolutionsare:,root1,root2)main()9编程实例:quadratic3-二条分支判断ThisprogramfindstherealsolutionstoaquadraticPleaseenterthecoefficients(a,b,c):1,1,2Theequationhasnorealroots!ThisprogramfindstherealsolutionstoaquadraticPleaseenterthecoefficients(a,b,c):2,5,2Thesolutionsare:-0.5-2.010编程实例:多条分支判断•当二条分支的程序解决了无解的问题,输入某些值时,还会出现某些怪异现象。•如:Pleaseenterthecoefficients(a,b,c):1,2,1Thesolutionsare:-1.0-1.0编程实例:完善quadratic.pyquadratic3:未考虑重根情形,discrim=b*b-4*a*cifdiscrim0:print\nTheequationhasnorealroots!else:discRoot=math.sqrt(b*b-4*a*c)root1=(-b+discRoot)/(2*a)root2=(-b-discRoot)/(2*a)print\nThesolutionsare:,root1,root2•即应区分判别式0,=0,0三种情形.–解决方法一:用嵌套if-elseifdiscrim0:else:ifdiscrim=0:else:对三分支尚可,但对更多分支不是好方法.11编程实例:完善quadratic.py解决方法二:用if-elif-elsequadratic4.pydiscrim=b*b-4*a*cifdiscrim0:print\nTheequationhasnorealroots!elifdiscrim==0:root=-b/(2*a)print\nThereisadoublerootat,rootelse:discRoot=math.sqrt(b*b-4*a*c)root1=(-b+discRoot)/(2*a)root2=(-b-discRoot)/(2*a)print\nThesolutionsare:,root1,root213编程实例:温度警告•在第二章中的摄氏温度转换到华氏温度例题:#convert.py#AprogramtoconvertCelsiustempstoFahrenheit#by:SusanComputewelldefmain():celsius=eval(input(WhatistheCelsiustemperature?))fahrenheit=9/5*celsius+32print(Thetemperatureis,fahrenheit,degreesFahrenheit.)main()14编程实例:温度警告15编程实例:温度警告#convert2.py#AprogramtoconvertCelsiustempstoFahrenheit.#Thisversionissuesheatandcoldwarnings.defmain():celsius=eval(input(WhatistheCelsiustemperature?))fahrenheit=9/5*celsius+32print(Thetemperatureis,fahrenheit,degreesfahrenheit.)iffahrenheit=90:print(It'sreallyhotoutthere,becareful!)iffahrenheit=30:print(Brrrrr.Besuretodresswarmly)main()16关系运算符含义PythonMathematicsMeaningLessthan=≤Lessthanorequalto===Equalto=≥GreaterthanorequaltoGreaterthan!=≠Notequalto17关系运算符•注意:使用==作为等于运算符,由于Python使用=作为赋值运算符。•一个常见问题是使用=作为等于条件判断。18关系表达式•布尔条件判断结果是True或False34True3*43+4Falsehello==helloTrueHellohelloTrue19编程实例:多条分支判断多分支判定•语法if条件1:语句序列1elif条件2:语句序列2...elif条件n语句序列nelse缺省语句序列•语义:找到第一个为真的条件并执行对应语句序列,控制转向下一条语句;若无,则执行else下的语句序列,控制转向下一条语句.20PythonProgramming,2/e21编程实例:多条分支判断•ifcondition1:case1statementselifcondition2:case2statementselifcondition3:case3statements…else:defaultstatements•Else是可选项,如果没有最后的else,程序会执行选择结构外的语句。程序运行错误的处理•错误检测代码:利用if判断是否发生了某种运行错误.do_sth()ifsome_error:do_sth_else()•有的函数利用返回特殊值来表示某种运行错误发生.–例如:设计otherSqrt(),若无平方根返回-1.ifotherSqrt(b*b4*a*c)0:22异常处理•错误检测代码的缺点:当程序中大量充斥着这样的错误检测代码时,解决问题的算法反而不明显了.•解决办法:异常处理机制.–程序员编写捕获并处理运行时错误的代码,而不是在每一步都去检测.–Python提供try...except...–可使程序不因运行错误而崩溃,尽量让用户不受意外结果的困扰.2324异常处理语句•try语句的形式:try:bodyexceptErrorType:handler•当Python遇见try语句时,它试图执行body内的语句。•body体语句执行完,如果没有错,则执行try…except以后的语句。多行异常处理语句•语法try:正常程序体except错误类型1:异常处理程序1...except错误类型n:异常处理程序nexcept:其他异常的处理程序•语义:执行正常程序体.若无错,控制转下一语句;若有错,查找匹配该错误的except子句,找到则执行相应的异常处理程序,找不到则程序崩溃,系统报错.25编程实例:完善quadratic.py•用异常处理语句来捕获math.sqrt的溢出错误(quadratic5.py)try:...exceptValueError:...•错误类型:从系统报错信息中可得.–如ValueError,TypeError,NameError等•对quadratic进一步完善为可捕获各种错误类型(quadratic6.py)26编程实例:quadratic5.py#quadratic5.py#Aprogramthatcomputestherealrootsofaquadraticequation.#Illustratesexceptionhandlingtoavoidcrashonbadinputsimportmathdefmain():printThisprogramfindstherealsolutionstoaquadratic\n“try:a,b,c=input(Pleaseenterthecoefficients(a,b,c):)discRoot=math.sqrt(b*b-4*a*c)root1=(-b+discRoot)/(2*a)root2=(-b-discRoot)/(2*a)print\nThesolutionsare:,root1,root2exceptValueError:print\nNorealroots“main()编程案例:quadratic6.py中的异常处理:try:a,b,c=input(Pleaseenterthecoefficients(a,b,c):)discRoot=math.sqrt(b*b-4*a*c)root1=(-b+discRoot)/(2*a)root2=(-b-discRoot)/(2*a)print\nThesolutionsare:,root1,root2exceptValueError,excObj:msg=str(excObj)ifmsg==mathdomainerror:printNo

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

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

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

×
保存成功