繁体   English   中英

while循环中奇怪的颜色ansi转义序列行为

[英]Weird color ansi escape sequence behavior in while loop

我正在 Python 中制作一个简单的井字游戏。 我认为如果我将 Xs 和 Os 设为彩色,对用户来说会更容易。 在游戏过程中,最初的几次迭代工作正常,但在整行有颜色后,字符串会变形,我不知道为什么。

初始板是我这样格式化的字符串:

def get_board():
   board = ""
   for i in range(9):
       if i == 1 or i == 4 or i == 7:
           board += f"  {i} |  {i+1} |  {i+2} \n"
       else:
           board += "    |" * 2 + "    \n"
       if i == 2 or i == 5:
           board += "- " * 7 + "-\n"
   return board

在此处输入图像描述

然后游戏玩法是这样的:

def play_move(number, player, board):
   PURPLE = '\033[35m'
   YELLOW = '\033[33m'
   ENDC = '\033[0m'
   player = f"{PURPLE}{player}{ENDC}" if player == 'o' else f"{YELLOW}{player}{ENDC}"
   return board.replace(number, player)

def main():
   filled_spaces = []
   players = ["o", "x"]
   x = 0
   board = get_board()
   print(board)
   while x < 9:
       space = input(
           f"Enter a space on the board for player '{players[x%2]}'\n")
           board = play_move(space, players[x % 2], board)
           filled_spaces.append(space)
           x += 1
       print(board)

然后这就是发生的事情

第一轮:o选1

在此处输入图像描述

第二轮:x选2

在此处输入图像描述

第三轮:o选3

在此处输入图像描述

如果您想尝试,这是完整的代码:

import sys


def get_board():
    board = ""
    for i in range(9):
        if i == 1 or i == 4 or i == 7:
            board += f"  {i} |  {i+1} |  {i+2} \n"
        else:
            board += "    |" * 2 + "    \n"
        if i == 2 or i == 5:
            board += "- " * 7 + "-\n"
    return board


def play_move(number, player, board):
    PURPLE = '\033[35m'
    YELLOW = '\033[33m'
    ENDC = '\033[0m'
    player = f"{PURPLE}{player}{ENDC}" if player == 'o' else f"{YELLOW}{player}{ENDC}"
    return board.replace(number, player)


def main():
    filled_spaces = []
    players = ["o", "x"]
    x = 0
    board = get_board()
    print(board)
    while x < 9:
        space = input(
            f"Enter a space on the board for player '{players[x%2]}'\n")
        if space not in filled_spaces:
            board = play_move(space, players[x % 2], board)
            filled_spaces.append(space)
            x += 1
        else:
            print(
                f"\nERROR: {space} has already been taken, choose a different space\n")
        print(board, flush=True)

    print("GAME OVER")


if __name__ == "__main__":
    main()

让网格只包含移动,并在打印时进行格式化:

import sys


def get_board():
    board = ""
    for i in range(9):
        if i == 1 or i == 4 or i == 7:
            board += f"  {i} |  {i+1} |  {i+2} \n"
        else:
            board += "    |" * 2 + "    \n"
        if i == 2 or i == 5:
            board += "- " * 7 + "-\n"
    return board

PURPLE = '\033[35m'
YELLOW = '\033[33m'
ENDC = '\033[0m'

def play_move(number, player, board):
    return board.replace(number, player)

def print_board(board):
    b = board.replace('o', f"{PURPLE}o{ENDC}").replace('x', f"{YELLOW}x{ENDC}")
    print(b)

def main():
    filled_spaces = []
    players = ["o", "x"]
    x = 0
    board = get_board()
    print_board(board)
    while x < 9:
        space = input(
            f"Enter a space on the board for player '{players[x%2]}'\n")
        if space not in filled_spaces:
            board = play_move(space, players[x % 2], board)
            filled_spaces.append(space)
            x += 1
        else:
            print(
                f"\nERROR: {space} has already been taken, choose a different space\n")
        print_board(board)

    print("GAME OVER")


if __name__ == "__main__":
    main()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM