如何用turtle实现用户输入绘制多边形并定时循环重绘?
问题与解决方案
问题说明
需要开发一个Python程序,通过turtle库实现以下功能:
- 根据用户输入的边数、边长绘制正多边形
- 绘制完成后等待几秒清除画面
- 重复上述流程直至程序终止
当前代码使用for循环仅执行3次,尝试改用while True循环时,出现窗口关闭后无法重新打开的问题。
问题根源
turtle.clearscreen()方法会完全重置turtle环境,包括关闭绘图窗口、清除所有turtle实例。因此在while循环中调用该方法后,后续的绘图操作无法再创建新窗口,导致程序失效。
修复后的代码
# 绘制自定义正多边形 import turtle import time def draw_polygon(sides, length): # 正多边形每个外角为360/边数,转向角度直接用这个值即可 angle = 360 / sides for _ in range(sides): turtle.forward(length) turtle.left(angle) # 主循环,支持用户主动退出 while True: try: # 获取边数,输入'exit'退出程序 sider_input = input("请输入多边形的边数(输入'exit'退出):") if sider_input.lower() == 'exit': break sider = int(sider_input) if sider < 3: print("边数必须大于等于3,请重新输入!") continue # 获取边长并转换为像素(mm转像素系数) lengde_side = float(input("请输入边长(单位:mm):")) lengde_side *= 3.7795275591 # 计算并输出角度信息 interior_angle = (sider - 2) * 180 / sider print(f"多边形内角和为 {(sider-2)*180} 度,每个内角为 {interior_angle:.2f} 度") # 绘制多边形 draw_polygon(sider, lengde_side) # 等待4秒后清除绘图(不关闭窗口) time.sleep(4) turtle.clear() except ValueError: print("输入无效,请输入数字或'exit'!") # 程序结束时关闭窗口 turtle.bye()
优化要点
- 替换清屏方式:用
turtle.clear()替代turtle.clearscreen(),仅清除画布上的绘图,保留窗口和turtle实例,确保循环中能持续绘图 - 简化角度计算:正多边形的转向角度直接用
360/边数(外角),无需复杂的内角推导,逻辑更简洁 - 增加退出机制:支持用户输入
exit主动终止程序,避免强制关闭窗口 - 输入验证:捕获非数字输入的异常,同时限制边数必须≥3(正多边形的基本要求)
- 代码模块化:将绘图逻辑封装为
draw_polygon函数,提高代码可读性和可维护性 - 格式化输出:用f-string优化角度信息的输出格式,更清晰直观
内容的提问来源于stack exchange,提问作者Theoforus
相关产品推荐
相关产品推荐

