《像计算机科学家一样思考Python》——4.10 调试

4.10 调试

函数的接口,作用就像是函数和调用者之间签订的一个合同。调用者同意提供某些参数,而函数则同意使用这些参数做某种工作。

例如,polyline需要4个参数:t必须是一个Turtle;n是边线的个数,所以必须是整数;length应当是个正数;而angle则必须是一个数字,并且按照度数来理解。

这些需求被称为前置条件,因为它们应当在函数开始执行之前就保证为真。相对地,函数结束的时候需要满足的条件称为后置条件。后置条件包含了函数预期的效果(比如画出线段)以及任何副作用(比如移动乌龟或者引起World中的其他改变)。

满足前置条件是调用者的职责。如果调用者违反了一个(文档说明清晰的!)前置条件,因而导致函数没有正确运行,则bug是在调用者,而不在函数本身。

时间: 2024-10-22 19:36:23

《像计算机科学家一样思考Python》——4.10 调试的相关文章

《像计算机科学家一样思考Python(第2版)》——第1章 程序之道 1.1 什么是程序

第1章 程序之道 本书的目标是教会你像计算机科学家一样思考.这种思考方式综合了数学.工程学以及自然科学的一些最优秀的特性.计算机科学家与数学家类似,他们使用形式语言来描述理念(特别是计算):与工程师类似,他们设计产品,将元件组装成系统,对不同的方案进行评估选择:与自然科学家类似,他们观察复杂系统的行为,构建科学假说,并检验其预测. 作为计算机科学家,最重要的技能就是问题求解.问题求解是发现问题.创造性地思考解决方案以及清晰准确地表达解决方案的能力.实践证明,学习编程的过程,正是训练问题求解能力的

《像计算机科学家一样思考Python》——导读

前 言 本书的奇特历史 1999年,我正在为一门Java的编程入门课程备课.这门课我已经教过3个学期,感到有些灰心.课程的不及格率太高,即使是那些及格的学生,也只获得了很低的成就. 我发现问题之一是教材.它们太厚,有太多冗余的细节,而针对编程技巧的高阶的指导却很不足.并且学生们都受着"陷阱效应"的苦恼:开头时很容易,也能循序渐进,但接着在第5章左右,整个地板就突然陷落了.新资讯来得太多.来得太快,以至于我必须花费一学期剩下的全部时间来帮助他们拾回丢失的片段. 开课前两周,我决定自己来编

《像计算机科学家一样思考Python(第2版)》——导读

前 言 本书以培养读者以计算机科学家一样的思维方式来理解Python语言编程.贯穿全书的主体是如何思考.设计.开发的方法,而具体的编程语言,只是提供了一个具体场景方便介绍的媒介. 全书共21章,详细介绍Python语言编程的方方面面.本书从最基本的编程概念开始讲起,包括语言的语法和语义,而且每个编程概念都有清晰的定义,引领读者循序渐进地学习变量.表达式.语句.函数和数据结构.书中还探讨了如何处理文件和数据库,如何理解对象.方法和面向对象编程,如何使用调试技巧来修正语法错误.运行时错误和语义错误.

《像计算机科学家一样思考Python(第2版)》——2.10 练习

2.10 练习 练习2-1 重申上一张的建议,每当你学习新语言特性时,都应当在交互模式中进行尝试,并故意犯下错误,看会有哪些问题. 我们已经见过n = 42是合法的.那么42 = n呢? 那么x = y = 1呢? 有些语言中,每个语句都需要以分号(;)结尾.如果你在Python语句的结尾放一个分号,会有什么情况? 如果在语句结尾放的是句号呢? 在数学标记中,对于x乘以y,可以这么表达:xy.在Python中这样尝试会有什么结果? 练习2-2 把Python解释器当作计算器来进行练习. 1.半径

《像计算机科学家一样思考Python》—— 3.10 栈图

3.10 栈图 要跟踪哪些变量在哪些地方使用,有时候画一个栈图(stack diagram)会很方便.和状态图一样,栈图可以展示每个变量的值,不同的是它会展示每个变量所属的函数. 每个函数使用一个帧包含,帧在栈图中就是一个带着函数名称的盒子,里面有函数的参数和变量.前面的函数示例的栈图如图3-1所示. 图中各个帧从上到下安排成一个栈,能够展示出哪个函数被哪个函数调用了.在这个例子里,print_twice被cat_twice调用,而cat_twice被__main__调用.__main__是用于

《像计算机科学家一样思考Python(第2版)》——1.9 练习

1.9 练习 练习 1-1 在计算机前阅读本书是一个好主意,因为你可以边看边试验书中的示例. 每当你试验新的语言特性时,应当试着故意犯错.例如,在"Hello,World!"程序中,如果少写一个引号,会发生什么?如果两个引号都不写,会怎么样?如果把print拼写错了,会如何? 这种试验会帮你记住所读的内容,也能帮你学会调试,因为这样能看到不同的出错消息代表着什么.现在故意犯错总比今后在编码中意外出错好. 在print语句中,如果漏掉一个括号,或者两个都漏掉,会发生什么? 如果正尝试打印

《像计算机科学家一样思考Python》——3.3 数学函数

3.3 数学函数 Python有一个数学计算模块,提供了大多数常用的数学函数.模块是指包含一组相关的函数的文件. 要想使用一个模块,需要先将它导入(import)运行环境: >>> import math 这个语句将会建立一个名为math的模块对象(module object).如果打印这个对象,可以看到它的一些信息: >>> print math <module 'math' (built-in)> 模块对象包含了这个模块中定义的函数和变量.若要访问其中的

《像计算机科学家一样思考Python(第2版)》——1.8 术语表

1.8 术语表 问题求解(problem solving):总结问题.寻找解决方案以及表达解决方案的过程. 高级语言(high-level language):设计来方便人们读写的编程语言,如Python. 低级语言(low-level language):设计来方便计算机执行的编程语言,也被称为"机器语言"或"汇编语言". 可移植性(portability):程序的一种属性:可以在多种类型的计算机上运行. 解释器(interpreter):一个读取其他程序并执行其

《像计算机科学家一样思考Python》——4.3 练习

4.3 练习 下面是一系列使用TurtleWorld的练习.它们力求有趣,但也包含着某些寓意.当你做这些练习时,可以猜想一下其寓意. 在接下来的章节中有这些练习的解答,所以在完成(或着至少尝试过)之前,请先别继续阅读. 1.写一个函数square,接受一个形参t,用来表示一只乌龟.利用乌龟来画一个正方形.写一个函数调用传入bob作为实参来调用square函数,并再运行一遍程序. 2.给square函数再添加一个形参length.修改函数内容,保证正方形的长度是length,并修改函数调用以提供这