Swampy程序包下载地址为:http://thinkpython.com/swampy
Swampy中有个模块“乌龟世界”(TurtleWorld),提供各种函数,可以控制一只乌龟在屏幕爬行并画出其爬行轨迹。
TurtleWorld中提供了几个用来指挥乌龟的函数:
fd:前进 bk:后退 lt:左转 rt:右转
每只乌龟都拿着一只笔,笔可以朝上或朝下:pu:笔朝上 pd:笔朝下
若笔朝下,则会绘制出乌龟走过的轨迹。若笔朝上,则不会绘出轨迹,用于在到达指定位置前不绘出轨迹。
则绘出一个正方形的代码如下所示:
from swampy.TurtleWorld import *
world = TurtleWorld()
bob = Turtle()
for i in range(3):
fd(bob,100)
lt(bob)
fd(bob,100)
wait_for_user()
程序运行如下图所示:
练习1:
写一个函数square ,接受一个形参 t,用来表示一只乌龟。利用乌龟来画一个正方形。写一个函数调用传入bob作为实参来调 用 square函数,并再运行一遍程序。
代码如下:
from swampy.TurtleWorld import *
world = TurtleWorld()
def square(t):
t=Turtle()
for i in range(3):
fd(t,100)
lt(t)
fd(t,100)
square('bob')
wait_for_user()
运行结果同上图。
练习2:
给 square函数再添加一个形参 length。修改函数内容,保证正方形的长度是length,并修改函数调用以提供这第二个实参。再运行一遍程序。使用不同的length测试你的程序。
代码如下所示:
from swampy.TurtleWorld import *
world = TurtleWorld()
def square(t,length):
t = Turtle()
for i in range(3):
fd(t,length)
lt(t)
fd(t,length)
square('bob',190)
wait_for_user()
运行结果如下所示:
length设为190,可见正方形面积大了一圈。。。
3.函数 lt和 rt 默认会进行90度的拐弯。但也可以提供第二个形参指定转弯的角度。比如,lt(bob,45)会让bob左拐45度。
复制square函数,并命名为polygon。再添加一个形参n并修改函数体以绘制一个正n变形。
提示:正n边形的拐角是 360/n 度。
程序代码如下所示:
from swampy.TurtleWorld import *
world = TurtleWorld()
def polygon(t,length,n):
t = Turtle()
for i in range(n):
fd(t,length)
lt(t,360/n)
polygon('Bob',70,8)
wait_for_user()
测试n为8,程序运行结果如下图所示:
4.写一个函数 circle接受代表乌龟的形参 t,以及表示半径的形参 r,并使用合适的长度和边数调用 polygon画一个近似的圆。 使用不同的r值来测试你的函数。
提示:思考圆的周长(circumference),并保证 length * n = circumference。
另一个提示:如果你感觉bob太慢了,可以修改bob.delay来加速。bob.delay代表每次行动之间的停顿,单位是秒。
bob.delay代表每次行动之间的停顿,单位是秒。 bob. delay = 0.01应该能让他跑得足够快。
代码如下:
from swampy.TurtleWorld import *
from math import *
world = TurtleWorld()
def lines(t,n,length,angle):
for i in range(n):
fd(t,length)
lt(t,angle)
def circle(t,r):
t = Turtle()
t.delay = 0.01
circum = 2 * pi * r
n = int (circum/4)+1
length = circum / n
angle = 360.0 / n
lt(t,angle/2)
lines(t,n,length,angle)
rt(t,angle/2)
circle('bob',90)
wait_for_user()
运行结果如下:
5.给circle 函数写一个更通用的版本,成为arc。增加一个形参angle,用来表示画的圆弧的大小。这里 angle 的单位是度数,所以当 arc=360时,则会画一个整圆。
代码如下所示:
1 from swampy.TurtleWorld import *
2 from math import *
3
4 world = TurtleWorld()
5
6 def polyline(t,n,length,angle):
7 for i in range(n):
8 fd(t,length)
9 lt(t,angle)
10
11 def arc(t,r,angle):
12 length = 2 * pi * r * angle /360.0
13 n = int(length / 3) + 1
14 arc_length = length / n
15 arc_angle = float(angle) / n
16 polyline(t,n,arc_length,arc_angle)
17
18 bob = Turtle()
19 bob.delay = 0.01
20 arc(bob,70,270)
21
22 wait_for_user()
运行结果如下: