彩色输出python

时间:2018-07-20 20:05:02

标签: python python-3.x colors

所以我找到了一些格式化2048 Game Board的代码,这样当一个数字超过1个数字时,它看起来就不会显得凌乱:

52

运行此代码可使内容更清晰,并更改nlist的值以查看格式如何工作。所以无论如何,在我完成游戏后,我想添加颜色以使游戏在终端中更易于理解,所以我将代码编辑如下:

nlist = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 128, 2, 2, 16, 16]
widths = [max(len(str(nlist[row * 4 + col])) for row in range(4)) + 2 for col in range(4)]
width = sum(widths) + 5
count = 0
for i in range(16):
    print('|{:^{width}}'.format(nlist[i], width=widths[i % 4]), end = '')
    count += 1
    if count == 4:
        print("|\n" + '-' * width)
        count = 0
print("")

但是现在格式全部搞砸了,我的面板看起来又丑了。有没有一种方法可以更改此代码,使它看起来像第一个代码,但带有颜色(现在几乎所有颜色出于时间考虑都是相同的。稍后我将对其进行更改)。另外,有没有更简单的方法将颜色放入条件语句中?

编辑:

这是指向没有正确格式的颜色的文件的链接:2048 that works(no colors)

这是指向颜色格式不正确的文件的链接:2048 that does not work(colors)

我运行代码的屏幕快照:Screen shot of messed up format

2 个答案:

答案 0 :(得分:3)

您的颜色编码混乱有两个原因。

1)您没有为0定义颜色编码,因此在代码中零与其他数字之间始终存在很大的格式差异。

2)您的宽度函数没有随颜色函数变化,但实际上,彩色输出的字符串长度比没有颜色的字符串长度大得多。因此,我建议您使用常数,例如22或更大的代码。 或者,您可以更改

widths = [max(len(str(nlist[row * 4 + col])) for row in range(4)) + 2 for col in range(4)]

widths = [max(len(str(nlist[row * 4 + col]))+21 for row in range(4)) + 2 for col in range(4)]

为简化if结构,建议您使用字典查找所需的颜色:

example

WHITE_COLOR = "#ffffff"
BACKGROUND_COLOR_GAME = "#92877d"
BACKGROUND_COLOR_CELL_EMPTY = "#9e948a"
BACKGROUND_COLOR_DICT = {   2:"#eee4da", 4:"#ede0c8", 8:"#f2b179", 16:"#f59563", \
                            32:"#f67c5f", 64:"#f65e3b", 128:"#edcf72", 256:"#edcc61", \
                            512:"#edc850", 1024:"#edc53f", 2048:"#edc22e" }
CELL_COLOR_DICT = { 2:"#776e65", 4:"#776e65", 8:"#f9f6f2", 16:"#f9f6f2", \
                    32:"#f9f6f2", 64:"#f9f6f2", 128:"#f9f6f2", 256:"#f9f6f2", \
                    512:"#f9f6f2", 1024:"#f9f6f2", 2048:"#f9f6f2" }
FONT = ("Verdana", 40, "bold")
SCORE_FONT=("Verdana", 20, "bold")

对于您的代码,您可以使其像

nlist = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 128, 2, 2, 16, 16]
color_dict = {0:' \033[1;37;106m0\033[0m ',
              2:' \033[1;37;106m2\033[0m ',4:' \033[1;37;104m4\033[0m ',
              8:' \033[1;37;106m8\033[0m ',16:' \033[1;37;106m16\033[0m ',
              32:' \033[1;37;106m32\033[0m ',64:' \033[1;37;106m64\033[0m ',
              128:' \033[1;37;106m128\033[0m ',256:' \033[1;37;106m256\033[0m ',
              512:' \033[1;37;106m512\033[0m ',1024:' \033[1;37;106m1024\033[0m ',
              2048:' \033[1;37;106m2048\033[0m ',4096:' \033[1;37;106m4096\033[0m '}
count = 0
for i in range(16):
    print('|{:^{width}}'.format(color_dict[nlist[i]], width=22), end = '')   #This line is modified.
    count += 1
    if count == 4:
        print("|\n" + '-')
        count = 0

答案 1 :(得分:0)

colored模块中的termcolor用于颜色

from termcolor import colored
nlist = [2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 128, 2, 2, 16, 16]
color = {n:'cyan' for n in nlist}
color[4] = 'red'

widths = [max(len(str(nlist[row * 4 + col])) for row in range(4)) + 16 for col in range(4)]
width = sum(widths) + 5
count = 0
for i in range(16):
    print('|{:^{width}}'.format(colored(nlist[i], 'white', 'on_'+color[nlist[i]]), width=widths[i % 4]), end = '')
    count += 1
    if count == 4:
        print("|\n" + '-' * width)
        count = 0
print("")

输出 我确实看到了以下颜色的输出

|  2  |  4   |  8   |  16  |
------------------------------------------------------------------------------------
| 32  |  64  | 128  | 256  |
------------------------------------------------------------------------------------
| 512 | 1024 | 2048 | 4096 |
------------------------------------------------------------------------------------
| 128 |  2   |  2   |  16  |
------------------------------------------------------------------------------------