Python 乌龟 class 计算长度
Python turtle class compute length
我正在制作某种用于绘图的 turtle 模块。
这是我目前拥有的:
class Turtle:
def __init__(self):
self.x = drawer.maxX / 2
self.y = drawer.maxY / 2
self.angle = 0
self.pen_active = True
self.pause = 0
self.body = drawer.circle(0, 0, 5, drawer.green, 3)
self.head = drawer.circle(0, 0, 3, drawer.green, 3)
self.length = 0
self.update()
def set_pause(self, n):
self.pause = n
def no_pause(self):
self.set_pause(0)
def hide(self):
self.body.hide()
self.head.hide()
def show(self):
self.body.show()
self.head.show()
def update(self):
self.body.setPos(self.x, self.y)
phi = radians(90 - self.angle)
self.head.setPos(self.x + 5 * cos(phi), self.y + 5 * sin(phi))
drawer.wait(self.pause)
def pen_up(self):
self.pen_active = False
def pen_down(self):
self.pen_active = True
def fly(self, x, y, angle):
self.x = x
self.y = y
self.angle = angle
self.update()
def forward(self, a):
phi = radians(90 - self.angle)
nx = self.x + a * cos(phi)
ny = self.y + a * sin(phi)
if self.pen_active:
drawer.line(self.x, self.y, nx, ny)
self.x = nx
self.y = ny
self.update()
def backward(self, a):
self.forward(-a)
def turn(self, phi):
self.angle += phi
self.update()
def left(self):
self.turn(-90)
def right(self):
self.turn(90)
def length(self):
pass
现在我正在尝试编写一种方法来计算绘制的线的长度,但我不知道该怎么做。当笔落下并且海龟向前或向后移动时画线。如果乌龟飞行或绕着线转,则不会画线。有任何想法吗。
感谢您的帮助。
如果我没理解错的话,您想要记录您的 Turtle
从创建之时起所有 forward
和 backward
移动的长度。
这很简单,您只需要注意变量名即可。目前,您正在使用 length
作为实例变量(保存 运行 长度总和)和方法名称。前者会影响后者,因此您可能需要两个不同的名称。
如果我们将实例变量重命名为_length
,你可以让它像这样工作:
class Turtle:
def __init__(self):
# unmodified stuff omitted
self._length = 0
# unmodified methods skipped
def forward(self, a):
# all the current stuff
self._length += abs(a) # absolute value to count backing up as movement
def length():
return self._length
您可能决定不需要琐碎的 length
方法,在这种情况下,您可以返回使用 self.length
作为您的实例变量名称(并在需要时访问属性值)。
我正在制作某种用于绘图的 turtle 模块。
这是我目前拥有的:
class Turtle:
def __init__(self):
self.x = drawer.maxX / 2
self.y = drawer.maxY / 2
self.angle = 0
self.pen_active = True
self.pause = 0
self.body = drawer.circle(0, 0, 5, drawer.green, 3)
self.head = drawer.circle(0, 0, 3, drawer.green, 3)
self.length = 0
self.update()
def set_pause(self, n):
self.pause = n
def no_pause(self):
self.set_pause(0)
def hide(self):
self.body.hide()
self.head.hide()
def show(self):
self.body.show()
self.head.show()
def update(self):
self.body.setPos(self.x, self.y)
phi = radians(90 - self.angle)
self.head.setPos(self.x + 5 * cos(phi), self.y + 5 * sin(phi))
drawer.wait(self.pause)
def pen_up(self):
self.pen_active = False
def pen_down(self):
self.pen_active = True
def fly(self, x, y, angle):
self.x = x
self.y = y
self.angle = angle
self.update()
def forward(self, a):
phi = radians(90 - self.angle)
nx = self.x + a * cos(phi)
ny = self.y + a * sin(phi)
if self.pen_active:
drawer.line(self.x, self.y, nx, ny)
self.x = nx
self.y = ny
self.update()
def backward(self, a):
self.forward(-a)
def turn(self, phi):
self.angle += phi
self.update()
def left(self):
self.turn(-90)
def right(self):
self.turn(90)
def length(self):
pass
现在我正在尝试编写一种方法来计算绘制的线的长度,但我不知道该怎么做。当笔落下并且海龟向前或向后移动时画线。如果乌龟飞行或绕着线转,则不会画线。有任何想法吗。
感谢您的帮助。
如果我没理解错的话,您想要记录您的 Turtle
从创建之时起所有 forward
和 backward
移动的长度。
这很简单,您只需要注意变量名即可。目前,您正在使用 length
作为实例变量(保存 运行 长度总和)和方法名称。前者会影响后者,因此您可能需要两个不同的名称。
如果我们将实例变量重命名为_length
,你可以让它像这样工作:
class Turtle:
def __init__(self):
# unmodified stuff omitted
self._length = 0
# unmodified methods skipped
def forward(self, a):
# all the current stuff
self._length += abs(a) # absolute value to count backing up as movement
def length():
return self._length
您可能决定不需要琐碎的 length
方法,在这种情况下,您可以返回使用 self.length
作为您的实例变量名称(并在需要时访问属性值)。