如何让一个字母保持一种颜色,而其余字母保持另一种颜色?

How do you keep one letter a color and the rest another color?

tl;dr 井字游戏输出全部为蓝色,只希望 x 为蓝色,o 为红色

在 class 中,我们正在尝试制作一个井字游戏,目前我们正在尝试修改代码,以便只有 X 是蓝色,O 是红色,但是当我们导入 colorama 时它为所有输出着色。我知道所有文本都将以蓝色打印。所以本质上它应该是这样的: 我也提供了游戏的代码。

import random
import colorama 
from colorama import Fore, Style
print(Fore.BLUE + "Hello World")
player_1_pick = ""
player_2_pick = ""

if (player_1_pick == "" or player_2_pick == ""):
  if (player_1_pick == ""):
    player_1_pick = "Player 1"
  if (player_2_pick == ""):
    player_2_pick = "Player 2"
else:
  pass

board = ["_"] * 9

def print_board():
  print(board[0] + '|' + board[1] + '|' + board[2])
  print(board[3] + '|' + board[4] + '|' + board[5])
  print(board[6] + '|' + board[7] + '|' + board[8])

print_board()
if (random.randint(1,2) == 1):
  player_1_pick = input(player_1_pick + ", choose X or O: ").upper()
  if (player_1_pick == "X"):
    player_2_pick = "O"



while True:
  x = input('Pick a number from 0-8')
  x = int(x)
  board[x] = 'X'
  print_board()

然后我们决定打开 python 的另一个选项卡(我们正在使用 repl.it)以尝试在隔离环境中解决问题,我们想出了:

import random
import colorama 
from colorama import Fore, Style
def getPieceLabel(piece):
  if (piece == 1):
    return "|" + color.PURPLE + color.BOLD + "X" + color.END + "|"
  elif (piece == 2 ):
    return "|" + color.BLUE + color.BOLD + "O"
    + "|" 
  else:
    return color.BOLD + "|_|" + color.END 

board = ["_"] * 9

def print_board():
  print(board[0] + '|' + board[1] + '|' + board[2])
  print(board[3] + '|' + board[4] + '|' + board[5])
  print(board[6] + '|' + board[7] + '|' + board[8])
  print(Style.RESET_ALL)

while True:
  x = input('Pick a number from 0-8')
  x = int(x)
  board[x] = 'X'
  print_board()

我们需要一些帮助来解决这个问题 out/what 问题是。

这是一个代码,可以为不同的项目打印不同的颜色(也在 repl.it 上测试过!)。

import random
import colorama 
from colorama import Fore, Style

print(Fore.BLUE + "Tic Tac Toe")
Style.RESET_ALL

player_1_pick = ""
player_2_pick = ""

if (player_1_pick == "" or player_2_pick == ""):
  if (player_1_pick == ""):
    player_1_pick = "Player 1"
  if (player_2_pick == ""):
    player_2_pick = "Player 2"
else:
  pass

board = ["_"] * 9

def print_board():
  for i in range(0, 3):
    for j in range(0, 3):
      if (board[i*3 + j] == 'X'):
        print(Fore.BLUE + board[i*3 + j], end = '')
      elif (board[i*3 + j] == 'O'):
        print(Fore.RED + board[i*3 + j], end = '')
      else:
        print(board[i*3 + j], end = '')

      print(Style.RESET_ALL, end = '')

      if j != 2:
        print('|', end = '')

    print() # new line

print_board()

if (random.randint(1,2) == 1):
  player_1_pick = input(player_1_pick + ", choose X or O: ").upper()
  if (player_1_pick == "X"):
    player_2_pick = "O"

while True:
  x = input('Pick a number from 0-8: ')
  x = int(x)
  board[x] = 'X'
  print_board()

为什么? 当您使用 Back.REDFore.RED 时,它只会更改全局输出颜色(而不只是那个特定的 print()陈述)。这意味着如果您想要不同的颜色,您必须为每个要打印的项目更改颜色。这就是我在 print_board().

下所做的

由于您要打印 3x3 矩阵(或二维数组)以及元素或项目之间的边界,我不得不使用两个循环以不同颜色(根据需要)打印它们中的每一个。

注意:该程序可以运行,但我认为缺少一些逻辑,因为该游戏仅适用于第一个玩家;没有第二个播放器(甚至系统播放器)。这超出了这个答案的范围。