在python中动态创建变量名?
问题描述:
在Python中我的第一个“大”项目,我试图让simon says游戏的克隆与pygame的在python中动态创建变量名?
()方法需要我来检测实例是什么颜色(self.color) 和改变颜色的闪烁基于此。
那么红到鲜明,蓝到brightblue等问题是,我现在的代码是非常漫长和丑陋的,我知道必须有一个更好的方式来做到这一点。
这是我的丑陋的代码:
def blink(self):
if self.color == red:
self.color = brightred
elif self.color == blue:
self.color = brightblue
elif self.color == green:
self.color = brightgreen
所定义的颜色:
black = (0,0,0)
white = (255,255,255)
red = (150,0,0)
green = (0,150,0)
blue = (0,0,150)
yellow = (150,150,0)
brightred = (255,0,0)
brightgreen = (0,255,0)
brightblue = (0,0,255)
brightyellow = (255,255,0)
最后包含此方法的类:
class rec:
def __init__(self,left,top,size,color):
self.left = left
self.top = top
self.size = size
self.color = color
self.rect = pygame.Rect(self.left,self.top,self.size,self.size)
pygame.draw.rect(d,self.color,self.rect)
pygame.display.update()
def blink(self):
if self.color == red:
self.color = brightred
elif self.color == blue:
self.color = brightblue
elif self.color == green:
self.color = brightgreen
elif self.color == yellow:
self.color = brightyellow
pygame.draw.rect(d,self.color,self.rect)
pygame.display.update() # Not finished
答
你可以使用一个2维数组为您的颜色,其中[0] [0]为红色,[0] [1]为红色。眨眼之间,您可以切换第二个维度以获得更好的效果。
答
如果你只是想显示明亮的颜色,你可以通过255/150
乘以你的颜色值,这不需要if语句,除了黑到白的情况下,如果你关心的是
def blink(self):
self.color = map(lambda c: c*(255/150), self.color)
答
你有两个选择。在这两种方法中,您都应该先将单独变量的特定颜色移动到数组或字典中。一旦你这样做,你可以:
- 通过选择一个替代品在颜色之间切换。
例如:
self.colour_name = 'red'
colour = COLOURS[self.colour_name][is_bright]
- 代替专门定义每种颜色,使一个函数,使颜色变亮。如果你关心颜色是否正确,你可以转换成不同的比例,降低亮度并转换回RGB。但是如果你只关心明亮/黑暗的差异,你可以随心所欲。
例如:
def make_bright(colour):
return tuple(x*2 for x in colour)
...
if is_bright:
colour = make_bright(COLOURS[self.colour_name])
else:
colour = COLOURS[self.colour_name]
对不起,我不明白的问题。这里有什么问题?你的目标是什么? –