功能在要求上不一致

时间:2015-11-28 15:26:34

标签: python turtle-graphics

我正在学习使用这本书#34; Think Python"而且我很困惑。我遇到的问题是在TurtleWorld中创造花朵。我创建的功能在他们的要求中并不一致。首先让我发布成品,实际上有效:

from swampy.TurtleWorld import*

world=TurtleWorld()
bob=Turtle()
print bob
bob.delay=.001

def polyline(t,n,length,angle):
    t=Turtle 
    print t
    for i in range(n):
        fd(bob,length)
        lt(bob,angle)

def arc(t, r, angle):
    t=Turtle
    arc_length=2*math.pi*r*angle/360
    n=int(arc_length/3)+1
    step_length=arc_length/n
    step_angle=float(angle)/n
    polyline(t,n,step_length,step_angle)

def petal(t,r,angle):
    for i in range(2):
        arc(t,r,angle)
        lt(t,180-angle)

def flower(t, n, r, angle):
    t=Turtle
    for i in range(n):
        petal(bob,r,angle)
        lt(bob,360/n)

flower(bob,5,77,99)

wait_for_user

关于arcpetal的函数定义,t就足够了,但是在我开始时,在t的定义中使用flowerpolyline返回错误的未绑定方法(fd和lt)。需要turtle实例,而是获取类型实例。

在事实之后添加了t=Turtleprint turtle添加到一半的函数定义以尝试修复此错误。这是工作版本,我只是想知道为什么它之前没有工作。我甚至不确定为什么会这样有效,因为我主要将bob置于t中而不是沮丧,我实际上并不期望它能够发挥作用。

1 个答案:

答案 0 :(得分:0)

虽然我使用下面提供的Python提供的海龟库,而不是swampy.TurtleWorld,但我认为它对你所遇到的问题没有任何影响。您似乎对函数调用中的形式参数以及函数调用和方法调用之间的区别存在基本的误解。考虑这一系列事件:

flower(bob,5,77,99)
def flower(t, n, r, angle):
    t=Turtle
    ...

这里一只非常好的海龟bob作为海龟参数t传入,只是立即用其他东西替换。或者考虑具有海龟参数polyline的{​​{1}},而是在需要乌龟时使用全局t。以下是我将您的计划整合在一起的方式:

bob

<强>输出

enter image description here