提问人:Bark Jr. Jr. 提问时间:11/13/2023 最后编辑:Bark Jr. Jr. 更新时间:11/13/2023 访问量:42
每次访问(或从/复制到)列表中的对象时,如何运行方法?
How to run a method every time an object is accessed (or copied from/to) in a list?
问:
我正在尝试在 Python 中使用 turtle 类时学习堆栈。基本上,我写了一个脚本来用画一个三角形。为此,我创建了一个 Shape 类,其中 size 和 turtle 作为参数。然后,当 Shape 对象初始化时,它会在屏幕上绘制一个给定大小的三角形(使用)。
我正在将这个 Shape 对象推送到堆栈上。实际上,使用 for 循环,我将 10 个三角形推到堆栈上!(即 10 个 Shape 对象。然后,一旦所有 10 个都在堆栈中,我将将它们从堆栈中弹出到另一个堆栈中。这应该重新绘制三角形(尽管顺序相反)。
我不知道如何让在三角形被弹出并复制并推入第二个堆栈时重新绘制三角形!我还尝试将“三角形的绘制”作为 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)
答:
0赞
Perdi Estaquel
11/13/2023
#1
您必须扩展堆栈类并重新实现 push 和 pop...在 push(或 pop)内,画出三角形,然后调用原始堆栈的 push(或 pop)
评论
0赞
juanpa.arrivillaga
11/13/2023
没有堆栈类,无论如何,这听起来不应该是堆栈类的责任。
评论
__init__
Shape
push(s1, Shape(200 - i, t))