You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Thonny中使用turtle模块绘图时窗口冻结且仅绘制单边问题求助

问题分析与修复

核心错误点

  • 转向角度计算完全颠倒:draw_polygon里的angle = n_sides / 360是致命错误——正多边形每次转向角度应该是360 / n_sides。用原代码的话,6边形每次只转0.016°,乌龟几乎不转向,一直往同一个方向爬,程序陷入无意义的循环,直接导致窗口冻结。
  • 边长计算公式逻辑错误:side_length里的角度推导错了,正多边形边心距(你定义的height)和边长的正确关系是:边长 = 2 * height * tan(π / 边数),原公式算出的边长完全不符合预期。
  • 缺少窗口事件循环:代码末尾没加wn.mainloop(),要么绘图后窗口直接闪退,要么循环卡住时窗口彻底冻结。

修复后的完整代码

import turtle
import math

wn = turtle.Screen()
ted = turtle.Turtle()

def side_length(n_sides, height):
    '''返回正多边形的边长'''
    tan_angle = math.pi / n_sides
    length = 2 * height * math.tan(tan_angle)
    return length

def draw_polygon(a_turtle, n_sides, height):
    '''绘制正多边形'''
    length_polygon = side_length(n_sides, height)
    angle = 360 / n_sides
    for i in range(n_sides):
        a_turtle.forward(length_polygon)
        a_turtle.left(angle)

draw_polygon(ted, 6, 50)
# 保持窗口打开,直到手动关闭
wn.mainloop()

修复说明

  1. 把转向角度改成360 / n_sides,确保乌龟每次转正确的角度(比如6边形每次转60°),能完整画出多边形。
  2. 修正边长计算公式,让边心距和边长的对应关系符合正多边形的几何规则。
  3. 添加wn.mainloop()启动窗口事件循环,绘图完成后窗口会保持打开状态,不会闪退或无响应。

内容的提问来源于stack exchange,提问作者Santiago Sánchez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 07:42:47