且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《像计算机科学家一样思考Python》——第4章 案例研究:接口设计 4.1 乌龟世界

更新时间:2022-09-24 19:00:05

本节书摘来自异步社区《像计算机科学家一样思考Python》一书中的第4章,第4.1节,作者[美]Allen B. Downey,赵普明 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。

第4章 案例研究:接口设计

4.1 乌龟世界

程序包(package)是多个模块的组合;Swampy中有一个模块“乌龟世界”(TurtleWorld),它提供各种函数,可以引导一只乌龟在屏幕上爬行,并画出其踪迹。

系统中安装好了Swampy之后,就可以像下面这样导入TurtleWorld模块:

from swampy.TurtleWorld import *

如果你下载了Swampy但并没有安装,则可以在其代码目录中使用,或者将其目录加入到Python的搜索路径中。接下来就可以这样导入TurtleWorld:

from TurtleWorld import *

安装过程的细节和如何设置Python的搜索路径,依赖于你所使用的系统。所以我在这里不细加讨论,而在http://thinkpython.com/swampy 里维护几种系统的相关安装信息。

创建一个文件mypolygon.py,并输入如下代码:

from swampy.TurtleWorld import *

world = TurtleWorld()
bob = Turtle()
print bob

wait_for_user()

第一行从swampy程序包的TurtleWorld模块里导入全部成员。

接下来几行建立一个TurtleWorld对象,赋值给变量world;建立一个Turtle对象,赋值给bob。

打印bob对象会得到如下信息:

<TurtleWorld.Turtle instance at 0xb7bfbf4c>

这意味着bob变量引用着TurtleWorld模块中定义的Turtle类的一个实例(instance)。在这个语境中,“实例”是指集合中的一员;bob这个Turtle对象是可能存在的所有Turtle的集合的一员。

wait_for_user告诉TurtleWorld等待用户进行某些操作,虽然现在除了关闭窗口之外,并没有提供给用户多少有用的操作。

TurtleWorld提供了几个用来指挥乌龟的函数:fd和bk用于前进和后退,lt和rt用于左转和右转。另外,每只乌龟都拿着一只笔,可以朝上或者朝下;若笔朝下,则会绘制出走过的路迹。函数pu和pd分别表示“笔朝上”(pen up)和“笔朝下”(pen down)。

若要画一个朝右的角,在程序中(建立bob实例之后,调用wait_for_user之前)添加如下代码:

fd(bob, 100)
lt(bob)
fd(bob, 100)

第一行告诉bob前进100步。第二行告诉它左拐。

当你运行这个程序时,将会看到bob先向东走,再向北走,身后留下两条线段。

现在试着修改程序,画出一个正方形来。在成功之前请不要继续!