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 закрывается сразу после ввода, подозревайте ошибку, которую можно выявить, запустив скрипт из терминала. Для числового ввода заранее преобразуйте значение в число, прежде чем использовать его в вычислениях. Эта простая привычка предотвращает «тихие» сбои и экономит время при работе с небольшими графическими утилитами.