如何在python中循环克隆对象?

如何在python中循环克隆对象?,python,loops,Python,Loops,这是我在这里发布的第一个问题,我对编码非常陌生,所以如果我做错了,请原谅!我正在使用图形库创建一个房子。我正在做一个栅栏,有一个形状重复了很多次,只是移到了右边17个像素。我正在使用John Zelle的图形库 import graphics as g win = g.GraphWin("Welcome Home", 500, 500) fencePost = g.Polygon(g.Point(3, 340), g.Point(8, 335), g.Point(13, 340), g.Poi

这是我在这里发布的第一个问题,我对编码非常陌生,所以如果我做错了,请原谅!我正在使用图形库创建一个房子。我正在做一个栅栏,有一个形状重复了很多次,只是移到了右边17个像素。我正在使用John Zelle的图形库

import graphics as g
win = g.GraphWin("Welcome Home", 500, 500)

fencePost = g.Polygon(g.Point(3, 340), g.Point(8, 335), g.Point(13, 340), g.Point(13, 370), g.Point(3, 370))
fencePost.setFill('white')
fencePost.setOutline('white')
fencePost.draw(win)

fencePostTwo = fencePost.clone()
fencePostTwo.move(17, 0)
fencePostTwo.draw(win)

fencePostThree = fencePostTwo.clone()
fencePostThree.move(17, 0)
fencePostThree.draw(win)

fencePostFour = fencePostThree.clone()
fencePostFour.move(17, 0)
fencePostFour.draw(win)
以上是我的代码中的内容…字面上是25次。我试着把它变成一个函数,如下所示,我想它会在序列中循环创建10个围栏柱,但当我运行它时,什么也没发生。有什么建议吗?谢谢大家!

def newFence():
    sequence = [15, 30, 45, 60, 75, 90, 105, 120, 135, 150]
    sequenceMultiplier = 1
    for index in range (len(sequence)) :
        newFencePost = fencePost.clone()
        newFencePost.move(sequenceMultiplier, 0)
        newFencePost.draw(win)
newFence()

您的想法是使用下一个克隆将以下代码重复25次:

fencePostTwo = fencePost.clone()
fencePostTwo.move(17, 0)
fencePostTwo.draw(win)
最简单的方法是重命名变量并将其放入循环中:

current_fence_post = fencePost
for i in range(25):
    current_fence_post = current_fence_post.clone()
    current_fence_post.move(17, 0)
    current_fence_post.draw(win)
或者,如果您希望将其包含在函数中,可以执行以下操作:

def make_shifted_clone(win, obj, offset_x, offset_y):
    cloned_object = obj.clone()
    cloned_object.move(offset_x, offset_y)
    cloned_object.draw(win)
    return cloned_object
然后:

next_post = fencePost
for i in range(25):
    next_post = make_shifted_clone(win, next_post, 17, 0)

我认为逻辑中存在一个问题,您没有使用序列数组中的数字。 您需要在move语句中使用它,类似这样的操作将起作用:

newFencePost.move(sequenceMultiplier*sequence[index],0)

如果只是迭代序列并使用它的数字,更改

for offset in sequence:
...

嗨,艾莉,欢迎你。如果您告诉我们您正在使用哪个图形库,这将非常有用。在代码示例中,包括导入“g”的导入语句。另外,如果你进一步解释为什么它不起作用(行为与你期望的有什么不同)@MattyW是的,什么是
g
?@MattyW我更新了它!我正在使用约翰·泽尔的图形库。我想让函数在序列中循环并创建10个栅栏柱,但这不会发生。谢谢你的耐心!