2026, Jan 06 09:01
Окно Python Turtle закрывается после ввода: причина и решение
Разбираем, почему окно Python Turtle закрывается сразу после ввода: ошибка типа из‑за строки в вычислениях. Решение — преобразовать input в float. Просто.
Скрипты Python, которые открывают окно графики Turtle, при запуске двойным щелчком могут «мелькнуть и исчезнуть», особенно сразу после чтения пользовательского ввода. Если окно закрывается сразу после того, как вы ввели значение, это сильный сигнал, что программа столкнулась с ошибкой и завершилась раньше, чем вы успели увидеть, что произошло.
Воспроизводимый фрагмент, который вызывает проблему
Пример ниже рисует окружность с помощью Turtle. В одних средах поведение выглядит нормально, но при запуске двойным щелчком окно закрывается мгновенно.
import math
import turtle
def draw_arc(tool, radius, deg):
arc_len = 2 * math.pi * radius * deg / 360
steps = int(arc_len / 3) + 1
step_len = arc_len / steps
step_deg = float(deg) / steps
draw_polyline(tool, steps, step_len, step_deg)
def draw_polyline(tool, count, seg_len, turn_deg):
for _ in range(count):
tool.fd(seg_len)
tool.lt(turn_deg)
def draw_circle(tool, r):
draw_arc(tool, r, 360)
turtle.mainloop()
user_radius = input("Enter the radius of the circle to be printed: ")
pen = turtle.Turtle()
draw_circle(pen, user_radius)
Что на самом деле происходит
Значение, сохранённое в переменной radius, — это строка. Эта строка передаётся в вычисление arc_len внутри draw_arc. Когда программа пытается вычислить арифметическое выражение с участием этой строки, возникает ошибка. Выполнение останавливается, и при запуске скрипта двойным щелчком окно закрывается без видимой трассировки.
Запуск вручную из оболочки позволяет увидеть сообщение об ошибке.
Исправление: преобразуйте ввод в числовой тип
Минимальное изменение — преобразовать ввод в число с плавающей запятой перед использованием в вычислениях. Остальное остаётся без изменений.
import math
import turtle
def draw_arc(tool, radius, deg):
arc_len = 2 * math.pi * radius * deg / 360
steps = int(arc_len / 3) + 1
step_len = arc_len / steps
step_deg = float(deg) / steps
draw_polyline(tool, steps, step_len, step_deg)
def draw_polyline(tool, count, seg_len, turn_deg):
for _ in range(count):
tool.fd(seg_len)
tool.lt(turn_deg)
def draw_circle(tool, r):
draw_arc(tool, r, 360)
turtle.mainloop()
user_radius = float(input("Enter the radius of the circle to be printed: "))
pen = turtle.Turtle()
draw_circle(pen, user_radius)
Почему это важно
В коротких скриптах, зависящих от оконного интерфейса, любая необработанная ошибка может завершить программу так быстро, что вы не успеете увидеть сообщение. Если значение, используемое в числовом выражении, оказывается строкой, вычисление срывается, программа завершается, а окно Turtle исчезает. Преобразование ввода гарантирует, что арифметика отрабатывает корректно и окно остаётся открытым, как задумано.
Практические выводы
Если окно Turtle закрывается сразу после ввода, подозревайте ошибку, которую можно выявить, запустив скрипт из терминала. Для числового ввода заранее преобразуйте значение в число, прежде чем использовать его в вычислениях. Эта простая привычка предотвращает «тихие» сбои и экономит время при работе с небольшими графическими утилитами.