我正在研究用 python 编写的 pacman 程序。其中一个模块是处理吃 bean 游戏的图形表示。这当然是一些主机颜色。列表如下:
GHOST_COLORS = [] ## establishes a list of ghost colours
GHOST_COLORS.append(formatColor(.9,0,0)) # Red
GHOST_COLORS.append(formatColor(0,.3,.9)) # Blue
GHOST_COLORS.append(formatColor(.98,.41,.07)) # Orange
GHOST_COLORS.append(formatColor(.1,.75,.7)) # Green
GHOST_COLORS.append(formatColor(1.0,0.6,0.0)) # Yellow
GHOST_COLORS.append(formatColor(.4,0.13,0.91)) # Purple
这些颜色随后被映射:
GHOST_VEC_COLORS = map(colorToVector, GHOST_COLORS)
这里是 colorToVector:
def colorToVector(color):
return map(lambda x: int(x, 16) / 256.0, [color[1:3], color[3:5], color[5:7]])
我想我了解 lambda 的工作原理。但是我对颜色切片的方式感到困惑:
- 整合到(x,16)元组中,
- 转换为 int --> 这不应该是可能的
- 然后除以 256.0?
每当我尝试创建元组并将其转换为 python 中的 int 时,我似乎都会收到错误消息。
我在这里错过了什么?
如有任何帮助,我们将不胜感激。
PS:当我介绍
print(color)
和
print map(lambda x: int(x, 16) / 256.0, [color[1:3], color[3:5], color[5:7]])
在混合中,我得到 GHOST_COLORS[0] 的以下值作为颜色:
>>#e50000
>>[0.89453125, 0.0, 0.0]
请您参考如下方法:
#e50000 是一个字符串,有 7 个字符。所以,
color[1:3] == "e5" # Hexadecimal value
color[3:5] == "00" # Hexadecimal value
color[5:7] == "00" # Hexadecimal value
现在,它们一一传递给 lambda 函数 int(x, 16)/256.0。现在,x 将有 e5。 int 函数的第二个参数表明,第一个参数基于 16 进制。因此,int 将 e5 转换为等效的 10 进制数,然后它除以 256。
