Изменение положения черепахи 1 меняет положение черепахи 2 - PullRequest
1 голос
/ 13 мая 2019
def func():
    print("T POSITION: ", t.pos()) # prints 100, 100
    t2.pencolor("black")
    t2.setpos(0,0)
    print("T POSITION: ", t.pos()) # Now, prints 0, 0
    print("T2 POISTION: ", t2.pos())

оба.t.pos() и t2.pos() установлены на (0,0), хотя я объявлен как глобальная переменная t1 и t2 отдельно.

t= turtle.getturtle()
t.setpos(100,100)
t2 = turtle.getturtle().

Если я хочу изменить только положение t2 на 0,0, как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 13 мая 2019

Вам нужно copy.copy t2:

import turtle,copy
t= turtle.getturtle()
t.setpos(100,100)
t2 = copy.copy(turtle.getturtle())
def func():
    print("T POSITION: ", t.pos())
    t2.pencolor("black")
    t2.setpos(0,0)
    print("T POSITION: ", t.pos())
    print("T2 POISTION: ", t2.pos())
func()

И теперь вы получаете результаты:

T POSITION:  (100.00,100.00)
T POSITION:  (100.00,100.00)
T2 POISTION:  (0.00,0.00)

В противном случае:

>>> t==t2
True
>>> t is t2
True
>>> id(t)
333763277936
>>> id(t2)
333763277936
>>> id(t) == id(t2)
True
>>> 

Это одни и те же объекты !!! полностью!

0 голосов
/ 13 мая 2019

Краткий ответ "Не используйте getturtle()!" Это не та функция, которую вы хотите. Он предназначен для доступа к единственной черепахе по умолчанию и редко требуется / используется. Вместо этого используйте Turtle(), чтобы получить новую черепаху:

import turtle

def func():
    print("T1 POSITION: ", t1.pos())
    t2.setpos(0, 0)
    print("T1 POSITION: ", t1.pos())
    print("T2 POSITION: ", t2.pos())

t1 = turtle.Turtle()
t1.pencolor("red")
t1.setpos(100, 100)

t2 = turtle.Turtle()
t2.pencolor("green")

func()

t2.circle(100)

t2.clear()

turtle.done()

И вам не нужно copy.copy() черепах. Если вы хотите новую черепаху, используйте Turtle(). Если вы хотите новую черепаху, которая похожа на существующую черепаху, назовите .clone() на этой черепахе, например, t3 = t1.clone().

...