使用Python的Swampy程序包中的“乌龟”画图及有意思的习题

          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()

             运行结果如下:

             

          

            

            

            

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值