我编写了一些代码,它们以不同的速率在大约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
答案 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)
当然,您可能希望将结果值约束为初始条件,如果在外部,则会导致其外部的两个值之间的数字触发器。也就是说,签订代码并不一定会使理解变得更简单,但在这种情况下,它相对简单。