Как добавить координаты в список - PullRequest
0 голосов
/ 22 мая 2019

У меня следующая проблема: мне нужно добавить координаты в list, но это не сработает.Я не получаю ошибку, но она ничего не добавляет!

t1 в моем коде - черепаха, и я хочу вставить t1.xcor() t1.ycor() в список obstacles в том же формате, что и другие элементы: (x, y).

obstacles = [(-300,-300),(-200,-200),(-100,-100),(100,100), (200,200),(300,300)]

def is_next_move_legal(heading:int, step:int) -> bool:
    next_step = step
    if heading == 90 or heading == 270:
        if heading == 90:
            next_step+= (t1.ycor())
        else:
            next_step-= (t1.ycor())
    else:
        if heading == 0:
            next_step+= (t1.xcor())
        else:
            next_step-= (t1.xcor())

    print(f" x={t1.xcor()}, y={t1.ycor()}")
    print(f" next_step={next_step}")
    #Extend List with Coordinates that Tron used
    obstacles.append((t1.xcor , t1.ycor))
    print("######################### \n")
    print("Obstacles: \n")
    print(*obstacles, sep='\n')
    print("######################### \n")


    if next_step > 300 or [(t1.xcor(), t1.ycor())] in obstacles:
        global tron_end
        tron_end = True
        quit_this()
        return False
    return True

Я хочу добавить каждую координату линии, которую рисует Трон!И эти координаты должны быть добавлены в список obstacles.

1 Ответ

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

Есть две немедленные ошибки и одна большая ошибка изображения.Во-первых, есть ошибка, которую @quamrana указал в комментариях:

[(t1.xcor(), t1.ycor())] in obstacles

obstacles - это list из tuple, поэтому вместо list из одного tuple мыследует искать tuple:

(t1.xcor(), t1.ycor()) in obstacles

или просто:

t1.position() in obstacles

Вторая немедленная ошибка - это строка:

obstacles.append((t1.xcor , t1.ycor))

, которая добавляетметоды xcor и ycor до obstacles, а не координаты черепахи.Вы хотите:

obstacles.append((t1.xcor(), t1.ycor()))

или просто:

obstacles.append(t1.position())

Теперь для большой проблемы с изображением, которая делает недействительным все вышеперечисленное.Черепахи бродят с плавающей точкой самолета.Сравнение координаты float черепахи с list из int координат в долгосрочной перспективе является проигрышным.Как ваша черепаха может быть на (100.00007, 100), когда вы тестируете на (100, 100).Один из способов обойти это - сравнить результат метода distance() черепахи с небольшим значением "близости".

Простой подход в этом случае состоит в том, чтобы не хранить и не сравнивать координаты черепахи напрямую, а конвертировать их в int first:

obstacles = [(-300, -300), (-200, -200), (-100, -100), (100, 100), (200, 200), (300, 300)]

def is_next_move_legal(heading, step):

    next_step = step

    if heading == 90 or heading == 270:
        if heading == 90:
            next_step += t1.ycor()
        else:
            next_step -= t1.ycor()
    else:
        if heading == 0:
            next_step += t1.xcor()
        else:
            next_step -= t1.xcor()

    print(" x={}, y={}".format(*t1.position()))
    print(" next_step={}".format(next_step))

    print("######################### \n")
    print("Obstacles: \n")
    print(*obstacles, sep='\n')
    print("######################### \n")

    x, y = int(t1.xcor()), int(t1.ycor())

    if next_step > 300 or (x, y) in obstacles:
        global tron_end
        tron_end = True
        quit_this()
        return False

    # Extend List with Coordinates that Tron used
    obstacles.append((x, y))

    return True

Я хочу добавить каждую координату линии, которую рисует Трон

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

...