#python #turtle-graphics
#python #черепаха-графика
Вопрос:
Я хочу создать более двух черепашек при запуске модулей. Итак, я объявил две переменные в turtle, но я вижу только одну черепаху. Что не так с моим кодом?
import turtle
t1=turtle.Turtle()
t2=turtle.Turtle()
colors = ["red", "blue", "green"]
turtle.bgcolor("yellow")
t1.speed(3)
t1.width(5)
length1 = 10
t2.speed(3)
t2.width(5)
length2 = 10
while length1 < 500:
t1.fd(length1)
t1.pencolor(colors[length1%3])
t1.right (89)
length1 = 3 #length1 = length1 3
while length2 < 500:
t2.fd(length2)
t2.pencolor(pink)
t2.left (89)
length2 = 4 #length2 = length2 4
input()
Комментарии:
1. Python и Turtle не являются многозадачными. Чтобы делать две вещи одновременно (т. Е. запустите две черепашки одновременно) вам пришлось бы использовать модульную потоковую обработку. Но я не уверен, что Turtle «потокобезопасен». Вы могли бы попробовать
turtle.ontimer()
имитировать многозадачность. Или поместите обе черепашки в одинwhile
цикл и сделайте один шаг с помощьюt1
, затем один шаг с помощьюt2
, затем снова один шаг с помощьюt1
и снова один шаг с `t2 и т.д.
Ответ №1:
Ваши черепашки перемещаются одна за другой. Первый while
цикл выполняет работу с t1
, и когда это будет сделано, второй while
позаботится об t2
. Это как « t1
, сделай свой первый шаг. Затем, t1
создайте свое второе. (и повторяйте это до тех пор, пока length1
не станет меньше 500.) Теперь t1
готово, так что t2
сделайте свой первый шаг. t2
, ваш второй шаг. (и это продолжается.)»
Вместо этого вы хотите, чтобы они по очереди выполняли каждый из своих шагов. Это как « t1
, сделай свой первый шаг. Затем, t2
, сделайте свой первый. t1
, сделайте свой второй шаг. t2
, ваша очередь для вашего второго шага. (и это продолжается.)»
Итак, ваш while
цикл должен выглядеть следующим образом:
t1.pencolor(colors[length1 % 3])
t2.pencolor("pink")
while length1 < 500 or length2 < 500:
if length1 < 500:
t1.fd(length1)
t1.right(89)
length1 = 3 # length1 = length1 3
if length2 < 500:
t2.fd(length2)
t2.left(89)
length2 = 4 # length2 = length2 4
(Обратите внимание, вам не нужно устанавливать цвет карандаша при каждом перемещении черепашки.)
Ответ №2:
я вижу только одну черепаху
Существует ли буквально только одна черепашка, или у вас заканчивается терпение, ожидая завершения первой черепашки до того, как начнется вторая черепашка (и прерывается из-за «pink» без кавычек)? Если речь идет о желании увидеть обеих черепашек в действии одновременно, как заключили люди, вот мой подход:
Помимо использования потоков, я использую генераторы, позволяющие двум черепашкам работать в режиме, подобном сопрограмме. Преимущество заключается в том, что черепашки могут совместно использовать точно один и тот же код, если захотят, или они могут использовать совершенно разный код. Но это позволяет избежать дублирования кода или поддержания несвязанного кода в одном while
цикле:
from turtle import Screen, Turtle
screen = Screen()
screen.bgcolor("yellow")
t1 = Turtle()
t1.pencolor('blue')
t2 = Turtle()
t2.pencolor('pink')
def pattern(turtle, increment, angle):
turtle.speed('fast')
turtle.width(5)
length = 10
while length < 500:
turtle.forward(length)
turtle.right(angle)
length = increment
yield 0
generator1 = pattern(t1, 3, 89)
generator2 = pattern(t2, 4, -89)
while next(generator1, 1) next(generator2, 1) < 2:
pass
screen.exitonclick()