代码之家  ›  专栏  ›  技术社区  ›  ford

python乌龟图形在颜色索引中迭代引发错误

  •  0
  • ford  · 技术社区  · 12 年前

    我刚开始使用蟒蛇Turtle图形模块,我遇到的问题不是Turtle本身,我不认为,而是我的算法样式。我使用的是window.colormode(255),当我在程序中从红色迭代到蓝色时,它非常棒,并且工作得很好,每个循环递增一次蓝色变量,递减一次红色变量。

    我的滤镜遇到了一个问题,应该颠倒颜色递增/递减的顺序(我想在r=0和b=255时从蓝色变回红色):

    这是要绘制的代码:

    counter = 1
    firstlength = 1
    secondlength = 1
    thirdlength = 1
    fourthlength = 1
    fifthlength = 1
    colorList = [255,0,0] # r g b
    f = 0 # index for colorlist
    for i in listOfTurtles:
        i = turtle.Turtle()
        i.pencolor(colorList[0], colorList[1], colorList[2])
        i.speed(0) # no turn animations
        i.left(counter)
        i.forward(firstlength)
        i.left(15)
        i.forward(secondlength)
        i.left(15)
        i.forward(thirdlength)
        i.left(15)
        i.forward(fourthlength)
        i.left(15)
        i.forward(fifthlength)
        counter += 1
        firstlength += .1
        secondlength += .11
        thirdlength += .12
        fourthlength += .13
        fifthlength += .14
    

    以下是迭代笔颜色的问题(使用下面的答案):

    blueUp = True
        if blueUp == True:
            colorList[0] -= 1
            colorList[2] += 1
            if colorList[0] <= 1:
                blueUp = False
        else:
            colorList[0] += 1
            colorList[2] -= 1
            if colorList[2] <= 0:
                blueUp = True
    

    然而,我设置的这个滤镜并没有在需要的时候翻转增色器/减色器;从而导致“坏颜色序列错误:(-1,0256)

    所以我知道它在第一次传球时把我的蓝色1位数增加得太高,把我的红色1位数增加到太低,然后出错,但我不确定如何解决;值并使其更高(达到5或250左右),但我没有得到结果。

    我完全愿意用一种完全不同的方式来写这篇文章,因为我相信我已经想出了解决这个问题的最糟糕的方法。

    2 回复  |  直到 12 年前
        1
  •  0
  •   forefinger    12 年前

    首先,您可能应该改变这一点:

    if blueUp == False:
        if colorsList[2] > 0:
    

    对此:

    if blueUp == False:
        if colorList[2] > 1:
    
        2
  •  0
  •   ford    12 年前

    我是个白痴。我的bool变量是外部for语句的本地变量,该语句在我的i中迭代。每次循环,它都会重置blueUp的值,并迫使索引再次下降1。通过将我的bool移动到外部for循环之外来解决问题。