Код черепахи выполнен, но не рисует на холсте - PullRequest
0 голосов
/ 05 декабря 2018

В настоящее время я работаю над финалом для простого курса Python, однако мне показалось, что я столкнулся с чем-то довольно странным.Цель состояла в том, чтобы создать меню с проверкой исключений ошибок и позволить пользователю запускать предопределенные функции.Все прекрасно работает , КРОМЕ для функции drawKochFractal.

Кажется, что он компилируется и работает совершенно нормально, и я знаю, что логика и математика верны.Я даже добавил операторы print, чтобы проверить, где он находится в консоли, и он определенно работает.Но ничего не рисуется и не появляется в окне холста!Я что-то упустил из виду или это может быть моя собственная среда Python?Спасибо!

elif select == 3:
            #Koch Function:
            """
            File: koch.py
            Project 7.3

            This program displays a Koch snowflake using
            the user's input level.
            """
            def drawKochFractal(width, height, size, level):
                """Draws a Koch fractal of the given level and size."""
                t.screen.colormode(255)
                t.pencolor(random.randint(1, 255),
                random.randint(1, 255),
                random.randint(1, 255))
                t.up()
                t.goto(-width // 3, height // 4)
                t.down()
                print("I am the begin")
                drawFractalLine(t, size, 0, level);
                print("I am here")
                drawFractalLine(t, size, -120, level)
                drawFractalLine(t, size, 120, level)

            def drawFractalLine(t, distance, theta, level):
                """Either draws a single line in a given direction
                or four fractal lines in new directions."""
                if (level == 0):
                    drawPolarLine(t, distance, theta)
                else:
                    drawFractalLine(t, distance // 3, theta, level - 1)
                    drawFractalLine(t, distance // 3, theta + 60, level - 1)
                    drawFractalLine(t, distance // 3, theta - 60, level - 1)
                    drawFractalLine(t, distance // 3, theta, level - 1)
                    print("I am here too!")

            def drawPolarLine(t, distance, theta):
                """Moves the given distance in the given direction."""
                t.setheading(theta)
                print("im turning!")
                t.forward(distance)

            width = input("Enter the width: ")
            height = input("Enter the height: ")
            size = input("Enter the size value: ")
            level = input("Enter the level (0 - 10): ")
            t = Turtle()
            t.hideturtle()
            t.screen.clear()
            #Let's make sure these variables are calculatable!
            try:
                width = int(width)
                height = int(height)
                size = int(size)
                level = int(level)
            except:
                print("####Invalid Response####")
                #If parameters do not work, send back to home menu
                main()
            #If level is not in correct range, send back to home menu with error response:
            if level > 10 or level < 0:
                print("####Level must be between 0 and 10####")
                main()
            #create drawKochFractal with user parameters, then take back to home menu:
            drawKochFractal(width, height, size, level)
            print("####Koch Fractal Complete! Taking you back to the main menu...####")
            main()

1 Ответ

0 голосов
/ 05 декабря 2018

Проблема здесь:

t = Turtle()
t.hideturtle()
t.screen.clear()

Метод clear() на экране наносит ущерб существующим черепахам пользователя и воссоздает метод по умолчанию.Я предлагаю вам попробовать:

from turtle import Screen, Turtle

# ...

screen = Screen()
screen.clear()
t = Turtle()
t.hideturtle()

То есть создайте свою черепаху после очистки экрана и не используйте свою черепаху для доступа к экрану clear(), используйте независимый указатель на единственный экранэкземпляр.

enter image description here

...