python 学习简记 《编程导论》 CH6&CH7

《编程导论》 CH6 测试和调试

6.1 测试

测试套件

划分

白盒测试 - 考察代码结构

黑盒测试 - 探索需求路径、测试边界条件

单元测试 vs 集成测试

测试桩和驱动程序

回归测试

6.2 调试

运行时的错误:

显式->隐式

持续->间歇

研究现有数据

提出假设、设计实验

减小搜索空间->二分查找


一些常见的问题,如:

传入函数的参数顺序错误

写错了名称,如把大写字母写成了小写字母

忘记了重新初始化变量

使用相等(==)而不是近似相等来测试两个浮点值

使用值相等(如L1==L2来比较两个列表)来判断对象相等(如id(L1)==id(L2))

忘记了一些内建函数有副作用

忘记了()会把函数类型对象的引用转换为函数调用

不小心创建了别名

其他


遇到阻碍时的一些忠告:

不要问自己程序为什么不按照你的想法工作,反之应问为什么程序会像现在这样工作

错误可能不在你认为的地方

试着向其他人解释错误

不要相信你读到的任何东西,尤其是文档

停止调试,开始开始编写文档

散散步,明天再来


找到错误后:

考虑错误是否可以解释所有观察到的问题

修改之前考虑可能产生的后果

及时备份,确保可以回退

等等


CH7 异常和断言

7.1 处理异常

例子

除零错误:

try:
    successFailureRatio = numSuccesses/float(numFailures)
    print 'The success/failure ratio is', successFailureRatio
except ZeroDivisionError:
    print 'No failures so the success/failure ratio is undefined.'
print 'Now here'
ValueError:
while True:
    val = raw_input('Enter an integer: ')
    try:
        val = int(val)
        print 'The square of the number you entered is',val**2
        break
    except ValueError:
        print val,' is not an integer'

如果程序中的一个代码块可能触发不止一种类型的异常,那么可以在except关键字之后跟一个异常元组,如:

except(ValueError,TypeError):


7.2 把异常当作控制流来使用

在许多编程语言中,标准的错误处理方法是让函数返回一个值(类似Python中的None)来表示出错。每个函数调用都需要检查返回值。在Python中若函数不能产生满足需求的结果,更常见的方法是让函数触发一个异常。

python的raise语句会强制触发一个指定的异常。形式为: raise exceptionName(arguments)

不同类型的异常可以接受不同类型的参数,而多数时候只是一个字符串,用来描述异常触发的原因

例子:

def getRatios(vect1,vect2):
    """assume vect1 and vect2 are lists with same length,
        return a list, in which each element is vect1[i]/vect2[i]"""
    ratios = []
    for index in range(len(vect1)):
        try:
            ratios.append(vect1[index]/float(vect2[index]))
        except ZeroDivisionError:
            ratios.append(float('nan')) #nan=Not a Number
        except:
            raise ValueError('getRatios called with bad arguments')
    return ratios

try:
    print getRatios([1.0,2.0,7.0,6.0],[1.0,2.0,0.0,3.0])
    print getRatios([],[])
    print getRatios([1.0,2.0],[3.0])
except ValueError,msg:
    print msg
结果:

[1.0, 1.0, nan, 2.0]
[]
getRatios called with bad arguments

另外一个例子:

def getGrades(fname):
    try:
        gradesFile = open(fname,'r') #open file for reading
    except IOError:
        raise ValueError('getGrades could not open '+fname)
    grades = []
    for line in gradesFile:
        try:
            grades.append(float(line))
        except:
            raise ValueError('Unable to convert line to float')
    return grades

try:
    grades = getGrades('quiz1grades.txt')
    grades.sort()
    median=grades[len(grades)//2]
    print 'Median grade is',median
except ValueError,errorMsg:
    print 'Whoops.',errorMsg

7.3 断言

assert语句 两种形式:

assert Boolean expression

assert Boolean expression, argument

执行assert语句时,会对布尔表达式进行求值。如果为true,继续执行。如果为false,会触发一个AssertionError异常。


Python的turtle库是一个海龟绘图模块,它是Python自带的标准库,可以通过import语句导入并在Python中使用。海龟绘图源自20世纪60年代的logo语言,它模拟了一个真实的海龟在画布上游走的过程,通过控制海龟的移动和绘画来创建图形。turtle库提供了一些功能函数,包括移动和绘画等操作。你可以使用turtle.fd(d)向前移动一定的距离d,使用turtle.bk(d)向后移动一定的距离d,使用turtle.circle(半径, 弧度)以某个点为圆心绘制曲线等。此外,turtle库还提供了绝对坐标和海龟坐标两种角度坐标体系,你可以通过turtle.seth(angle)来改变海龟的游走方向,也可以通过turtle.left(angle)和turtle.right(angle)以海龟为参考系改变方向。下面是一个示例代码: import turtle turtle.left(45) turtle.fd(150) turtle.right(135) turtle.fd(300) turtle.left(135) turtle.fd(150) 这段代码可以让海龟按照一定的角度和距离绘制出一些图形。通过使用turtle库,你可以使用海龟绘图来进行一些简单的图形绘制和可视化操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python基础学习简记--海龟绘图(Day10)](https://blog.csdn.net/weixin_39344224/article/details/102807350)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [python 学习笔记(三)---turtle库的使用(超详细)](https://blog.csdn.net/qq_40181592/article/details/86770960)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值