如何重复迭代多个变量

时间:2015-07-09 23:41:14

标签: python

我编写了一些代码,它们以不同的速率在大约1-255的范围内循环多个变量,以便在我正在编写的图形程序中循环显示某些颜色。我的代码有效,但它有点难看并重复了很多代码。我怎么能更优雅地写这个呢?

...

toggleDecrementi = False
toggleDecrementj = False
toggleDecrementk = False

...

for x in range(1,10000):
...

    if i >= 250:
        toggleDecrementi = True
    elif i <= 5:
        toggleDecrementi = False
    if toggleDecrementi == False:
        i = i + 2.5
    else:
        i = i - 2

    if j >= 255:
        toggleDecrementj = True
    elif j <= 0:
        toggleDecrementj = False
    if toggleDecrementj == False:
        j = j + 1
    else:
        j = j - 1

    if k >= 240:
        toggleDecrementk = True
    elif k <= 10:
        toggleDecrementk = False
    if toggleDecrementk == False:
        k = k + 3
    else:
        k = k - 3 

2 个答案:

答案 0 :(得分:1)

为您的颜色制作单个类可以简化您的代码。

以下是一个例子:

注意:它不支持递增/递减的不同值。

class ColorCycler:
    def __init__(self, color_int, color_min, color_max, color_change_value):
        self.value = color_int
        self.min = color_min
        self.max = color_max
        self.change = color_change_value
        self.increment = True

    def __next__(self):
        if self.value >= self.max:
            self.increment = False
        elif self.value <= self.min:
            self.increment = True

        if self.increment:
            self.value += self.change
        else:
            self.value -= self.change

        return self.value

r = ColorCycler(130, 5, 250, 2)            
g = ColorCycler(120, 0, 255, 1)
b = ColorCycler(200, 10, 240, 3)

for i in range(10):
    print(next(r), next(g), next(b))

给你:

128 119 197
126 118 194
124 117 191
122 116 188
120 115 185
118 114 182
116 113 179
114 112 176
112 111 173
110 110 170

答案 1 :(得分:0)

您还可以通过将边界检查和反转操作组合在一起来进一步收缩逻辑,如:

    if not self.min < self.value < self.max:
        self.change = self.change * -1
    self.value = max(min(self.value + self.change, self.max), self.min)

当然,您可能希望将结果值约束为初始条件,如果在外部,则会导致其外部的两个值之间的数字触发器。也就是说,签订代码并不一定会使理解变得更简单,但在这种情况下,它相对简单。