Python

Python Черепашья графика

Что неправильно в коде:

from turtle import *

screen = turtle.Screen()
t = turtle.Turtle()

t.speed('fastest')
t.penup()
t.goto(-200, 150)
t.pendown()

length = 300
height = length / 2
angle = 60

t.pensize(3)
t.begin_fill()
t.color('#ff0000')
t.forward(length)
t.right(angle)
t.forward(height)
t.right(angle)
t.forward(length)
t.right(angle)
t.forward(height)
t.right(angle)
t.forward(length)
t.right(angle)
t.forward(height)
t.right(angle)
t.forward(length)
t.color('#ffffff')
t.right(90)
t.forward(height*1.7/3)
t.right(90)
t.forward(length/3)
t.right(90)
t.forward(height*1.7/3)
t.right(180)
t.end_fill()

t.hideturtle()
screen.mainloop()
Код почти правильный, но есть одна ошибка. Вместо:

screen = turtle.Screen()
t = turtle.Turtle()


нужно написать:

screen = Screen()
t = Turtle()


Так как мы импортировали все имена из модуля turtle с помощью from turtle import *, нам не нужно указывать префикс turtle. перед именами Screen() и Turtle().

Итак, исправленный код выглядит так:

from turtle import *

screen = Screen()
t = Turtle()

t.speed('fastest')
t.penup()
t.goto(-200, 150)
t.pendown()

length = 300
height = length / 2
angle = 60

t.pensize(3)
t.begin_fill()
t.color('#ff0000')
t.forward(length)
t.right(angle)
t.forward(height)
t.right(angle)
t.forward(length)
t.right(angle)
t.forward(height)
t.right(angle)
t.forward(length)
t.right(angle)
t.forward(height)
t.right(angle)
t.forward(length)
t.color('#ffffff')
t.right(90)
t.forward(height*1.7/3)
t.right(90)
t.forward(length/3)
t.right(90)
t.forward(height*1.7/3)
t.right(180)
t.end_fill()

t.hideturtle()
screen.mainloop()


Теперь код работает правильно и рисует красный и белый флаг.
Максим Анискин
Максим Анискин
627
Лучший ответ
Проблема в том, что код использует оператор импорта подстановочных знаков from turtle import *. Хотя этот оператор удобен и позволяет вам использовать все функции и классы в модуле turtleбез префикса turtle., он может вызвать проблемы, если у вас есть другие модули или функции с теми же именами, что и в модуле turtle. Это может привести к конфликтам имен и неожиданному поведению.
Чтобы избежать этой проблемы, рекомендуется использовать явный оператор импорта вместо оператора импорта с подстановочными знаками. Например, вы можете заменить from turtle import *на import turtle, а затем добавить ко всем функциям и классам префикс turtle.. Это проясняет, откуда взялась каждая функция или класс, и позволяет избежать конфликтов имен.
Bagaudin Gadzhiev
Bagaudin Gadzhiev
3 598