1 / 33
文档名称:

数据处理的流程控制.ppt

格式:ppt   大小:1,462KB   页数:33页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

数据处理的流程控制.ppt

上传人:小落意心冢 2022/7/19 文件大小:1.43 MB

下载得到文件列表

数据处理的流程控制.ppt

相关文档

文档介绍

文档介绍:数据处理的流程控制
流程控制
数据是被加工处理的原材料,而处理过程要用流程控制结构来描述
类比:烹调=食材+烹制过程
烹制过程:先炒再煮;如果淡了则加盐;反复翻炒5分钟;...
常见的流程控制结构
顺序,跳转,分支,循环,子程序等
ning: Cold Wave!"
else:
print "Have fun!"
*
程序运行错误的处理
程序编译正确,但在运行时发生错误.
例如:a/b语法没错,但运行时万一b=0,就会出错
又如:输入数据的类型和个数不对,列表索引越界,等等
编程时如果没有考虑运行错误,程序就很容易运行崩溃,非正常结束.
好的程序应该是健壮的(Robust).
*
编程实例
求一元二次方程根:
import math
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, root2
运行程序,输入1,2,3
程序崩溃!
*
提高健壮性:使用错误检测代码
错误检测代码:利用if判断是否发生了某种运行错误.
do_sth()
if some-error:
do_sth_else()
*
编程实例
解方程程序的改进:
import math
a, b, c = input("Enter (a, b, c): ")
discrim = b * b - 4 * a * c
if discrim >= 0:
discRoot = (discrim)
root1 = (-b + discRoot) / (2 * a)
root2 = (-b - discRoot) / (2 * a)
print "The solutions are:", root1, root2
else:
print "The equation has no real roots!"
*
提高健壮性:利用函数返回码
函数中有检测代码,执行正常与否可利用返回值作为标志码.
调用者无条件调用函数,并检测返回值.
例如,为了解决sqrt函数的问题,设计robustSqrt():
def robustSqrt(x):
if x < 0:
return -1
else:
return (x)
则程序中可以这样检测
if robustSqrt(b*b4*a*c) < 0:...
*
异常处理
错误检测代码的缺点:当程序中大量充斥着错误检测代码时,解决问题的算法反而不明显了.
x = doOneThing()
if x == ERROR:
异常处理代码
......
或写成:
if doOneThing() == ERROR:
异常处理代码
......
*
算法清晰
但不健壮:
doStep1()
doStep2()
doStep3()
健壮但算法不清晰:
if doStep1() == ERROR:
错误处理代码1
elif doStep2() == ERROR:
错误处理代码2
elif doStep3() == ERROR:
错误处理代码3
异常处理
能否既健壮,又不破坏原来算法的清晰?
异常处理机制
程序运行时如果出错则"抛出"一个"异常";
程序员能编写代码"捕获"并处理异常;
可使程序不因运行错误而崩溃,尽量使用户不受意外结果的困扰.
*
Python的缺省异常处理
程序运行出错时,抛出的异常被Python系统自动处理-基本上就是中止程序的执行并显示一些错误信息.
>>> a = "Hello"
>>> print a[5]
Traceback (most recent call last): File "<stdin>", line 1, in <module>
IndexError: string index out of range
*
程序员自定义异常处理
Python提供try-except语句,可用来自定义异常处理代码.
>>> a = "Hello"
>>> try:
print a[5]
except IndexError:
print "Index wrong!"
Index wrong!
Lu Chaojun, SJTU
*