Как зациклить клонированный объект в python? - PullRequest
0 голосов
/ 09 октября 2018

Это мой первый вопрос, опубликованный здесь, и я очень новичок в кодировании, поэтому, пожалуйста, извините, если я делаю это неправильно!Я использую графическую библиотеку для создания дома.Я делаю забор, и есть одна фигура, которая повторяется несколько раз и просто сдвинута вправо на 17 пикселей.Я использую графическую библиотеку Джона Зелле.

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()

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Я думаю, что есть проблема в логике, вы не используете числа в массиве последовательностей.Вы должны использовать его в операторе перемещения, что-то вроде этого будет работать:

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

Было бы более логичным просто повторять последовательность и использовать ее числа, изменяя для forчто-то вроде

for offset in sequence:
...
0 голосов
/ 09 октября 2018

Ваша идея состоит в том, чтобы повторить следующий код 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...