[英]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.