每次在列表中访问(或复制)对象时如何运行方法?

问题描述 投票:0回答:1

我尝试在Python中使用turtle类时学习堆栈。基本上,我编写了一个脚本来使用海龟绘制三角形。为此,我创建了一个 Shape 类,以大小和海龟作为参数。然后,当 Shape 对象初始化时,它会在屏幕上绘制给定大小的三角形(使用海龟)。

我正在将此 Shape 对象推入堆栈。实际上,使用 for 循环,我将 10 个三角形压入堆栈! (即十个 Shape 对象。)然后,一旦所有 10 个 Shape 对象都进入堆栈,我就将它们从堆栈中弹出到另一个堆栈上。这应该重新绘制三角形(尽管顺序相反)。

我不知道如何让乌龟在弹出、复制并推入第二个堆栈时重新绘制三角形!我还尝试将“绘制三角形”作为 Shape 类中的方法。这也行不通。我还尝试从函数(而不是对象)绘制三角形,但堆栈仅包含 None (因为该函数将绘制第一个三角形,然后返回 None)。

如何让它在“移动”到另一个堆栈(弹出或推送)时绘制三角形?

这是我的代码:

import turtle
from stack import *

class Shape():
    def __init__(self, size, turtle):
        self.size = size
        self.half_size = int(self.size / 2)
        self.height = int((self.size**2 + self.half_size**2)**0.5)

        turtle.penup()
        turtle.setposition(self.half_size, -self.half_size)
        turtle.pendown()
        turtle.setposition(-self.half_size, -self.half_size)
        turtle.setposition(0, self.height - self.half_size)
        turtle.setposition(self.half_size, -self.half_size)
        turtle.penup()

WIDTH = 800
HEIGHT = 400

# initialize screen
turtle.setup(WIDTH, HEIGHT)
        
# create turtle window
window = turtle.Screen()
window.title('HW Set #3 - Problem #3: Turtle Shapes')

# get the turtle and hide it
t = turtle.getturtle()
t.hideturtle()

# initialize the two stacks (these are just lists)
s1 = getStack()
s2 = getStack()

for i in range(0 , 100, 10):
    push(s1, Shape(200 - i, t))

t.showturtle()

while not isEmpty(s1) == True:
    push(s2, pop(s1))
    print(s2)
python object methods stack
1个回答
0
投票

你必须扩展堆栈类并重新实现push和pop...在push(或pop)内部,绘制三角形,然后调用原始堆栈的push(或pop)

© www.soinside.com 2019 - 2024. All rights reserved.