如何用Turtle绘制正多边形?我的代码为何未达作业要求?
你的代码不符合作业要求的问题分析
你的代码虽然能运行,但和作业要求存在几个明显偏差,具体问题如下:
- 函数未按要求接收边数参数:
poly()函数没有定义参数,直接依赖全局变量side,不符合“函数需以边数为参数”的要求,导致函数无法独立传入不同边数调用,复用性差。 - 函数耦合全局状态:函数内部直接使用全局的
turtle实例,没有将绘图对象作为参数传入或在函数内管理,使得函数和全局状态绑定,独立性不足。 - 缺少输入合法性校验:用户可能输入小于3的数字(比如1、2),这时候无法构成正多边形,但你的代码没有做任何判断,会绘制出不符合预期的图形。
- 角度计算未封装在函数内:角度计算
360 / side依赖全局变量,没有体现“函数负责计算角度”的要求,应该基于函数接收的边数参数在内部完成计算。
修正后的代码示例
from turtle import Turtle def draw_polygon(turtle, num_sides): # 校验边数合法性,正多边形至少3条边 if num_sides < 3: print("正多边形边数至少为3,请重新输入!") return # 计算每次转向的角度 turn_angle = 360 / num_sides # 绘制多边形 for _ in range(num_sides): turtle.forward(100) turtle.right(turn_angle) # 循环接收用户输入,确保输入有效 while True: try: side = int(input("Enter the number of the sides: ")) if side >= 3: break print("边数不能小于3,请重新输入!") except ValueError: print("请输入有效的整数!") # 创建绘图实例并调用函数 t = Turtle() draw_polygon(t, side)
修正说明
- 函数
draw_polygon接收turtle实例和num_sides参数,完全符合作业中“函数以边数为参数”的要求,同时解耦了全局变量。 - 角度计算逻辑放在函数内部,基于传入的边数参数完成,满足“计算角度”的要求。
- 增加了输入合法性校验,确保用户输入的是有效整数且边数≥3,避免无效输入导致的错误。
- 函数逻辑独立,可重复调用绘制不同边数的多边形,扩展性更好。
内容的提问来源于stack exchange,提问作者Chaos
相关产品推荐
相关产品推荐

