Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3:无法使用Colorama模块重置颜色_Python_Python 3.x_Terminal_Python 3.4_Colorama - Fatal编程技术网

Python3:无法使用Colorama模块重置颜色

Python3:无法使用Colorama模块重置颜色,python,python-3.x,terminal,python-3.4,colorama,Python,Python 3.x,Terminal,Python 3.4,Colorama,我一直在尝试使用colorama以彩色打印字典值 我想让用户输入选择要上色的值并重置上一个选择的颜色当用户选择不同的值时,我能够根据选择更改颜色。我可以想出如何重置上一个选择 在下面的代码中,我重新创建了基本想法,您将在“else”块中看到一些我试图重置颜色的东西,但它们不起作用 我正在使用Python 3.4和colorama 0.3.3 import colorama from colorama import Fore, Back, Style from msvcrt import getc

我一直在尝试使用colorama以彩色打印字典值

我想让用户输入选择要上色的值并重置上一个选择的颜色当用户选择不同的值时,我能够根据选择更改颜色。我可以想出如何重置上一个选择

在下面的代码中,我重新创建了基本想法,您将在“else”块中看到一些我试图重置颜色的东西,但它们不起作用

我正在使用Python 3.4和colorama 0.3.3

import colorama
from colorama import Fore, Back, Style
from msvcrt import getch

colorama.init()

a1 = 'a1 text'
a2 = 'a2 text'
a3 = 'a3 text'
a4 = 'a4 text'

aDict = {49: a1, 50: a2, 51: a3, 52: a4}

choice = 0

# while choice is not the letter 'q'
while choice != 113:

    print('select number betweem 1 and 4:\n')
    # read key
    choice = ord(getch())

    # loop through dict of text
    for k, v in aDict.items():
        # if the key is equal to the choice
        if k == choice:
            # set the color
            aDict[k] = Fore.GREEN + v + Style.RESET_ALL
        else:
            # else reset the color
            # aDict[k] = v + Style.RESET_ALL
            # aDict[k] = Fore.RESET + v
            # print(Style.RESET_ALL)
            pass

    # print the text
    for k, v in aDict.items():
        print(v)
有什么想法吗

回答

我能够找到一个解决方案,虽然我无法让它在上面的情况下工作,但它在我需要它的真实情况下工作。如果不知道allBoards dict中的内容,它就没有真正的意义,但是行字符串是重要的部分

        for boards in allBoards:
            for i in range(1, 4):
            for number, board in boards.items():                                
                    if number == currentBoard:  
                        # rowString += Back.WHITE + Fore.BLACK + board[i][1] +'|'+ board[i][2] +'|'+ board[i][3] + Back.RESET + Fore.RESET + ' | '                          
                        rowString += Fore.CYAN + board[i][1] +'|'+ board[i][2] +'|'+ board[i][3] + Fore.RESET + ' | '                           
                    elif number in wins['X']:
                        rowString += Fore.RED + board[i][1] +'|'+ board[i][2] +'|'+ board[i][3] + Fore.RESET + ' | '
                    elif number in wins['O']:
                        rowString += Fore.GREEN + board[i][1] +'|'+ board[i][2] +'|'+ board[i][3] + Fore.RESET + ' | '
                    else:
                        rowString += board[i][1] +'|'+ board[i][2] +'|'+ board[i][3] + ' | '        
                rowStrings.append(rowString[:-3])
                rowString = ''

        i = 1
        for string in rowStrings:
            print(string)
            if i % 3 == 0 and i != 9:
                print('---------------------')
            i += 1
根据上面的行,绿色、重置\u均保留前置/追加

  • GREEN
    a1文本
    RESET\u ALL
  • 绿色
    绿色a1文本
    RESET\u ALL
    RESET\u ALL
  • 绿色
    绿色
    绿色a1文本
    全部重置
    全部重置
    全部重置
您需要在
else
块中删除环绕
绿色
RESET_ALL

与其这样做,不如用simple
if.做如下操作。。否则..

while choice != 113:
    print('select number betweem 1 and 4:\n')
    choice = ord(getch())
    for k, v in aDict.items():
        if k == choice:
            print(Fore.GREEN + v + Style.RESET_ALL)
        else:
            print(v)

在上述情况下,这将是完美的工作,但上述情况只是我在一个更大的项目中遇到的问题的简单再现。它包括从各种不同的字典中打印值,以将游戏板打印到控制台中。它涉及到在字典中循环,并将值附加到一个较大的字符串,然后在循环完成后打印该字符串。因此,我只是尝试给用户选择的字典中的值上色,然后当用户选择另一个时,我想重置所有字典中的所有颜色,并为新选择(字典)重新上色=Fore.GREEN+v+Style.RESET_ALL仅在while循环的每次迭代中将
选项设置为绿色。我试图重置与
else
语句中的用户输入不对应的值。我想这就是发生的一切!最好的解决方案是,如果有什么东西可以在印制板后重置整个端子的颜色,那么下次它将完全重置。到目前为止,在第一次迭代中,我可以为我需要的特定字典上色,但是在那之后,下一个字典上色了,但是旧的字典也是,我需要重置旧的字典one@ThriceGood,那么在
else
block:
if aDict[k].startswith(Fore.GREEN):aDict[k]=aDict[k][len(Fore.GREEN):-len(Fore.RESET\u ALL)]
ok cool,我认为Fore.GREEN和Fore.RESET\u实际上都在字符串中添加了某种可以删除的代码?ansi代码还是什么?@thricesgood,是的,你可以。
while choice != 113:
    print('select number betweem 1 and 4:\n')
    choice = ord(getch())
    for k, v in aDict.items():
        if k == choice:
            print(Fore.GREEN + v + Style.RESET_ALL)
        else:
            print(v)