簡體   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