资源预览内容
第1页 / 共32页
第2页 / 共32页
第3页 / 共32页
第4页 / 共32页
第5页 / 共32页
第6页 / 共32页
第7页 / 共32页
第8页 / 共32页
第9页 / 共32页
第10页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
数据处理的流程控制数据处理的流程控制分支控制结构分支控制结构流程控制流程控制数据是被加工数据是被加工处理的原材料理的原材料,而而处理理过程要用流程控制程要用流程控制结构来描述构来描述类比类比:烹调烹调=食材食材+烹制过程烹制过程烹制过程烹制过程:先炒再煮先炒再煮;如果淡了则加盐如果淡了则加盐;反复翻炒反复翻炒5分钟分钟;.常常见的流程控制的流程控制结构构顺序顺序,跳转跳转,分支分支,循环循环,子程序等子程序等好的流程好的流程:结构清晰构清晰,易理解易理解,易易验证,易易维护2 23 3 3顺序控制序控制结构构按按语句的自然先后句的自然先后顺序序执行行4 4 4编程程实例例温度温度转换程序程序 :华氏氏转换成成摄氏氏流程流程图:用用标准化的准化的图形符号来表示程序步形符号来表示程序步骤流程图中的步骤可以是不同抽象级的流程图中的步骤可以是不同抽象级的5 5 5分支控制分支控制结构构(1)可以可以选择不同的不同的执行路径行路径单分支分支结构构if : : 布布尔表达式表达式: 语句序列句序列.左左边需要需要缩进一些空格一些空格.语义:计算算的真假的真假.若若为真真,则执行行,并把控制并把控制转向下一条向下一条语句句;若若为假假,则直接直接把控制把控制转向下一条向下一条语句句.布布尔表达式表达式(1)是一个布是一个布尔表达式表达式.结果果为布布尔值True或或False简单布布尔表达式表达式: 关系运算关系运算: , =, , !=数数值比比较字符串比字符串比较: 按字典序按字典序.字符序由字符序由编码(ASCII等等)决定决定. 如如:大写字母在小写字母前大写字母在小写字母前.列表列表,元元组的比的比较66字符串比较举例x=aAx=aAx=aAAax=aaax=aaax=aaaax=aaaa布布尔表达式表达式(2)复复杂布布尔表达式表达式:布尔运算布尔运算:and, or, not and or not 89 9and的定的定义and表示表示“并且并且”: P and Q为真真 iff P和和Q都都为真真真值表见右真值表见右例例 (3 2) and (2 1)True (3 2) and (2 3)False PQP and QFFFFTFTFFTTTLu Chaojun, SJTU 1010or的定的定义or表示表示“或者或者”: P or Q为假假 iff P和和Q都都为假假真真值表表见右右与日常用与日常用语中互斥的中互斥的“或或”不同不同!例例 (3 2) or (3 (2 3) or (2 4)False PQP or QFFFFTTTFTTTT1111not的定的定义not表示表示“否定否定”:not P为真真 iff P为假假.真真值表表见右右例例 not 3 2False not not 3 2TruePnot PTFFT布布尔运算符的运算符的优先先级not最高最高, and次之次之, or最低最低Q: a or not b and c何意何意?A: a or (not b) and c)最好使用括号最好使用括号!12例例:一局一局乒乓球比球比赛的的结束束双方任何人先得双方任何人先得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) = 213编程程实例例温度温度转换程序程序增加增加热浪告警功能浪告警功能f = input(Temperature in degrees Farenheit: )c = (f 32) * 5.0 / 9print Temperature in degrees Celsius:,cif c 35: print Warning: Heat Wave! 141414Lu Chaojun, SJTU 15Lu Chaojun, SJTU 1515编程程实例例温度温度转换程序程序增加增加热浪和寒潮告警功能浪和寒潮告警功能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: Cold Wave! 16多路分支多路分支:嵌套嵌套if-elseif语句可以嵌套句可以嵌套多重嵌套不好多重嵌套不好难读代代码松散松散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编程程实例例温度温度转换程序程序f = input(Temperature in degrees Farenheit: )c = (f - 32) * 5.0 / 9print Temperature in degrees Celsius:, cif c = 35: print Warning: Heat Wave!elif c = 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 robustSqrt(x): if x 0: return -1 else: return math.sqrt(x)则程序中可以程序中可以这样检测if robustSqrt(b*b 4*a*c) a = Hello print a5Traceback (most recent call last): File , line 1, in IndexError: string index out of range 27程序程序员自定自定义异常异常处理理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 算法清晰且健壮算法清晰且健壮:try: doStep1() doStep2() doStep3()except ERROR: 错误处理代码错误处理代码异常异常处理理语句句可以可以对不同不同类型的型的错误分分别指定指定处理代理代码try: except : .except : except: 30编程程实例例解方程程序的改解方程程序的改进:用异常用异常处理理语句来捕句来捕获的溢的溢出出错误.(eg3_7.py)import mathtry: a, b, c = input(Enter (a, b, c): ) discRoot = ( 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! 更完善的版本更完善的版本End32
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号