0

我遇到了一个编码问题。我正在学习递归,到目前为止玩得很开心。我们从使用 python 海龟图形模块的基本海龟绘图开始。我已经把图片代码写下来了,但我也应该根据深度改变海龟笔的颜色。我的教授只是简单地谈到了 mod (%) 来实现这一点,但我不知道从哪里开始,希望能得到一些帮助。提前致谢。我无法添加图片,因为我的代表不够高,但基本上如果您运行代码,它会绘制“S”数字。第一个“S”应该是绿色,第二个两个红色,第三个三个绿色,等等。再次感谢。这是代码:

from turtle import *

def drawzig2(depth,size):
    if depth == 0:
        pass
    elif depth:
        left(90)
        fd(size/2)
        right(90)
        fd(size)
        left(45)
        drawzig2(depth-1,size/2)
        right(45)
        fd(-size)
        left(90)
        fd(-size)
        right(90)
        fd(-size)
        left(45)
        drawzig2(depth-1,size/2)
        right(45)
        fd(size)
        left(90)
        fd(size/2)
        right(90)

drawzig2(4,100)
4

2 回答 2

0

尝试这个。

from turtle import *

colors = ['green', 'red']

def drawzig2(depth,size):

    if depth == 0:
        pass
    elif depth:
        pencolor(colors[depth % len(colors)])
        left(90)
        fd(size/2)
        right(90)
        fd(size)
        left(45)
        drawzig2(depth-1,size/2)
        right(45)
        fd(-size)
        left(90)
        fd(-size)
        right(90)
        fd(-size)
        left(45)
        drawzig2(depth-1,size/2)
        right(45)
        fd(size)
        left(90)
        fd(size/2)
        right(90)

drawzig2(4,100)
于 2013-09-14T04:25:33.183 回答
0

正如您所指出的,@xfx 的解决方案设置然后无意中取消设置颜色,因为它没有正确处理关于递归的颜色。这是一个小的修改,它在进入例程时跟踪当前颜色(也可以计算),然后在退出时恢复它。这样,您不必担心递归调用对颜色做了什么,他们应该在找到它时保留它:

from turtle import Turtle, Screen

colors = ['green', 'red']

def drawzig2(turtle, depth, size):

    if depth == 0:
        return

    color = turtle.pencolor()

    turtle.pencolor(colors[depth % len(colors)])

    turtle.left(90)
    turtle.fd(size / 2)
    turtle.right(90)
    turtle.fd(size)
    turtle.left(45)

    drawzig2(turtle, depth - 1, size / 2)

    turtle.right(45)
    turtle.bk(size)
    turtle.left(90)
    turtle.bk(size)
    turtle.right(90)
    turtle.bk(size)
    turtle.left(45)

    drawzig2(turtle, depth - 1, size / 2)

    turtle.right(45)
    turtle.fd(size)
    turtle.left(90)
    turtle.fd(size / 2)
    turtle.right(90)

    turtle.pencolor(color)

yertle = Turtle()

drawzig2(yertle, 4, 100)

screen = Screen()

screen.exitonclick()

输出

在此处输入图像描述

于 2016-12-08T06:52:57.750 回答