根据递归深度Python Turtle更改颜色

时间:2013-09-14 03:02:11

标签: python recursion colors modulo turtle-graphics

我遇到了编码问题,我遇到了麻烦。我正在学习递归,到目前为止还有很好的时间。我们从使用python turtle图形模块的基本龟图开始。我已经将图片代码缩小了,但我也应该根据深度改变乌龟笔的颜色。我的教授只是简单地触及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)

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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()

<强>输出

enter image description here