如何修改TurtleWorld的ZigZag代码,实现交替执行Zig与Zag以绘制n个峰?
解决:绘制含n个峰的锯齿形海龟图案
需求说明
编写ZigZag(turtle, n)函数,使用turtle绘制包含n个峰的锯齿形图案:
- 当n=5时,图案需包含5个峰、4个谷
- 绘制完成后,海龟必须回到初始位置
原代码问题
原代码中zig和zag函数内部包含循环,调用一次就会生成多个峰/谷,且zigzag函数的循环逻辑导致先批量执行Zig再批量执行Zag,无法交替生成峰谷,不符合需求。
修改后的代码
from TurtleWorld import * world = TurtleWorld() franklin = Turtle() def zig(turtle): # 绘制单个峰(Zig) fd(turtle, 25) rt(turtle, 90) fd(turtle, 25) rt(turtle, 90) # 调整方向,确保下一个动作连续 def zag(turtle): # 绘制单个谷(Zag) fd(turtle, 25) lt(turtle, 90) fd(turtle, 25) lt(turtle, 90) # 调整方向,确保下一个动作连续 def zigzag(turtle, n): lt(turtle, 45) # 初始调整方向,让图案呈45度倾斜 # 交替绘制峰和谷:n个峰对应n-1个谷 for i in range(n): zig(turtle) if i < n - 1: zag(turtle) # 让海龟回到初始位置 rt(turtle, 180) fd(turtle, 25 * (2 ** 0.5)) # 移动斜边长度(25*√2)抵消位移 rt(turtle, 180) zigzag(franklin, 5) wait_for_user()
关键修改点
- 拆分
zig和zag为单次操作:移除函数内部的循环,每个函数仅绘制一个峰或谷,并调整方向保证后续绘制的连续性。 - 调整
zigzag循环逻辑:循环n次绘制峰,仅在非最后一次循环时绘制谷,确保n个峰对应n-1个谷。 - 添加回位逻辑:通过反向移动斜边长度,让海龟最终回到初始位置。
内容的提问来源于stack exchange,提问作者Kelvin Arias
相关产品推荐
相关产品推荐

