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