数据处理的流程控制.ppt

上传人:牧羊曲112 文档编号:6296321 上传时间:2023-10-14 格式:PPT 页数:32 大小:901.50KB
返回 下载 相关 举报
数据处理的流程控制.ppt_第1页
第1页 / 共32页
数据处理的流程控制.ppt_第2页
第2页 / 共32页
数据处理的流程控制.ppt_第3页
第3页 / 共32页
数据处理的流程控制.ppt_第4页
第4页 / 共32页
数据处理的流程控制.ppt_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《数据处理的流程控制.ppt》由会员分享,可在线阅读,更多相关《数据处理的流程控制.ppt(32页珍藏版)》请在三一办公上搜索。

1、数据处理的流程控制,分支控制结构,流程控制,数据是被加工处理的原材料,而处理过程要用流程控制结构来描述类比:烹调=食材+烹制过程烹制过程:先炒再煮;如果淡了则加盐;反复翻炒5分钟;.常见的流程控制结构顺序,跳转,分支,循环,子程序等好的流程:结构清晰,易理解,易验证,易维护,2,2,3,3,3,顺序控制结构,按语句的自然先后顺序执行,4,4,4,编程实例,温度转换程序eg3_1.py:华氏转换成摄氏流程图:用标准化的图形符号来表示程序步骤流程图中的步骤可以是不同抽象级的,5,5,5,分支控制结构(1),可以选择不同的执行路径单分支结构if:布尔表达式:语句序列.左边需要缩进一些空格.语义:计算

2、的真假.若为真,则执行,并把控制转向下一条语句;若为假,则直接把控制转向下一条语句.,布尔表达式(1),是一个布尔表达式.结果为布尔值True或False简单布尔表达式:关系运算:=,!=数值比较字符串比较:按字典序.字符序由编码(ASCII等)决定.如:大写字母在小写字母前.列表,元组的比较,6,6,字符串比较举例,x=a Ax=a Ax=aA Aax=aa ax=a aax=a a aax=aa a a,布尔表达式(2),复杂布尔表达式:布尔运算:and,or,not and or not,8,9,9,and的定义,and表示“并且”:P and Q为真 iff P和Q都为真真值表见右例(

3、3 2)and(2 1)True(3 2)and(2 3)False,Lu Chaojun,SJTU,10,10,or的定义,or表示“或者”:P or Q为假 iff P和Q都为假真值表见右与日常用语中互斥的“或”不同!例(3 2)or(3(2 3)or(2 4)False,11,11,not的定义,not表示“否定”:not P为真 iff P为假.真值表见右例 not 3 2False not not 3 2True,布尔运算符的优先级,not最高,and次之,or最低Q:a or not b and c何意?A:a or(not b)and c)最好使用括号!,12,例:一局乒乓球比赛

4、的结束,双方任何人先得11分a=11 or b=11更准确的:一方至少要多2分才胜(a=11 and a-b=2)or(b=11 and b-a=2)或者写成(a=11 or b=11)and abs(a-b)=2,13,编程实例,温度转换程序:eg3_2.py增加热浪告警功能f=input(Temperature in degrees Farenheit:)c=(f 32)*5.0/9print Temperature in degrees Celsius:,cif c 35:print Warning:Heat Wave!,14,14,14,Lu Chaojun,SJTU,15,Lu Ch

5、aojun,SJTU,15,15,编程实例,温度转换程序:eg3_3.py增加热浪和寒潮告警功能f=input(Temperature in degrees Farenheit:)c=(f 32)*5.0/9print Temperature in degrees Celsius:,cif c=35:print Warning:Heat Wave!if c=-6:print Warning:Cold Wave!,两路分支结构,语法if:else:if和else是非此即彼的关系.下列语句对吗?if c=35:print Warning:Heat Wave!else:print Warning:C

6、old Wave!,16,多路分支:嵌套if-else,if语句可以嵌套多重嵌套不好难读代码松散if c=35:print Warning:Heat Wave!else:if c=-6:print Warning:Cold Wave!else:print Have fun!,17,多路分支:if-elif-else结构,语法if:elif:.elif else 语义:找到第一个为真的条件并执行对应语句序列,控制转向下一条语句;若无,则执行else下的语句序列,控制转向下一条语句.,18,编程实例,温度转换程序eg3_4.pyf=input(Temperature in degrees Fare

7、nheit:)c=(f-32)*5.0/9print Temperature in degrees Celsius:,cif c=35:print Warning:Heat Wave!elif c=-6:print Warning:Cold Wave!else:print Have fun!,19,程序运行错误的处理,程序编译正确,但在运行时发生错误.例如:a/b语法没错,但运行时万一b=0,就会出错又如:输入数据的类型和个数不对,列表索引越界,等等编程时如果没有考虑运行错误,程序就很容易运行崩溃,非正常结束.好的程序应该是健壮的(Robust).,20,编程实例,求一元二次方程根:eg3_5

8、.pyimport matha,b,c=input(Enter(a,b,c):)discRoot=math.sqrt(b*b-4*a*c)root1=(-b+discRoot)/(2*a)root2=(-b-discRoot)/(2*a)print The solutions are:,root1,root2运行程序,输入1,2,3程序崩溃!,21,提高健壮性:使用错误检测代码,错误检测代码:利用if判断是否发生了某种运行错误.do_sth()if some-error:do_sth_else(),22,编程实例,解方程程序的改进:eg3_6.pyimport matha,b,c=input(

9、Enter(a,b,c):)discrim=b*b-4*a*cif discrim=0:discRoot=math.sqrt(discrim)root1=(-b+discRoot)/(2*a)root2=(-b-discRoot)/(2*a)print The solutions are:,root1,root2else:print The equation has no real roots!,23,提高健壮性:利用函数返回码,函数中有检测代码,执行正常与否可利用返回值作为标志码.调用者无条件调用函数,并检测返回值.例如,为了解决sqrt函数的问题,设计robustSqrt():def ro

10、bustSqrt(x):if x 0:return-1 else:return math.sqrt(x)则程序中可以这样检测if robustSqrt(b*b4*a*c)0:.,24,异常处理,错误检测代码的缺点:当程序中大量充斥着错误检测代码时,解决问题的算法反而不明显了.x=doOneThing()if x=ERROR:异常处理代码.或写成:if doOneThing()=ERROR:异常处理代码.,25,算法清晰但不健壮:doStep1()doStep2()doStep3(),健壮但算法不清晰:if doStep1()=ERROR:错误处理代码1elif doStep2()=ERROR:

11、错误处理代码2elif doStep3()=ERROR:错误处理代码3,异常处理,能否既健壮,又不破坏原来算法的清晰?异常处理机制程序运行时如果出错则抛出一个异常;程序员能编写代码捕获并处理异常;可使程序不因运行错误而崩溃,尽量使用户不受意外结果的困扰.,26,Python的缺省异常处理,程序运行出错时,抛出的异常被Python系统自动处理基本上就是中止程序的执行并显示一些错误信息.a=Hello print a5Traceback(most recent call last):File,line 1,in IndexError:string index out of range,27,程序员

12、自定义异常处理,Python提供try-except语句,可用来自定义异常处理代码.a=Hello try:print a5 except IndexError:print Index wrong!Index wrong!,Lu Chaojun,SJTU,28,异常处理机制的优点,既保持核心算法的清晰,又能提高程序的健壮性.,29,算法清晰但不健壮:doStep1()doStep2()doStep3(),健壮但算法不清晰:if doStep1()=ERROR:错误处理代码1elif doStep2()=ERROR:错误处理代码2elif doStep3()=ERROR:错误处理代码3,算法清晰

13、且健壮:try:doStep1()doStep2()doStep3()except ERROR:错误处理代码,异常处理语句,可以对不同类型的错误分别指定处理代码try:except:.except:except:,30,编程实例,解方程程序的改进:用异常处理语句来捕获math.sqrt的溢出错误.(eg3_7.py)import mathtry:a,b,c=input(Enter(a,b,c):)discRoot=math.sqrt(b*b-4*a*c)root1=(-b+discRoot)/(2*a)root2=(-b-discRoot)/(2*a)print The solutions are:,root1,root2except ValueError:print The equation has no real roots!更完善的版本:eg3_8.py,End,32,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号