Создание нескольких черепах в одном окне - PullRequest
0 голосов
/ 29 марта 2019

Я хочу сделать больше двух черепах при запуске модулей.Итак, я объявил две переменные для черепахи, но я вижу только одну черепаху.Что не так с моим кодом?

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

Ответы [ 2 ]

1 голос
/ 29 марта 2019

Ваши черепахи движутся одна за другой.Первый цикл 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

(Обратите внимание, что вам не нужно устанавливать цвет пера каждый раз, когда вы перемещаете черепаху.)

0 голосов
/ 29 марта 2019

я вижу только одну черепаху

Есть ли буквально только одна черепаха, или вам не хватает терпения, ожидая, пока первая черепаха закончит свою работу до того, как вторая черепаха начнет (и ломается, из-за не цитируемой 'розовой')? Если речь идет о желании увидеть обоих черепах в действии одновременно, как заключили люди, вот мой подход:

Если не использовать потоки, я использую генераторы, чтобы позволить двум черепахам работать в стиле сопрограмм. Преимущество состоит в том, что черепахи могут совместно использовать точный один и тот же код, если они хотят, или они могут использовать полностью другой код. Но это позволяет избежать дублирования кода или сохранения несвязанного кода в том же цикле 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()
...