Python井字棋界面行显示异常求助:需实现指定格式输出
解决Python井字棋界面行显示问题
当前程序界面仅以空格分隔棋盘格子,无行列分隔线,无法清晰区分每个格子;期望实现的界面是每个格子用竖线分隔,每行之间用横线分隔,行列编号与棋盘格子一一对应。
修改方案
核心是重写show_board方法调整棋盘输出格式,同时修正顶部的行列提示:
修改后的完整代码
import random class TicTacToe: def __init__(self): self.board = [] def create_board(self): for i in range(3): row = [] for j in range(3): row.append('-') self.board.append(row) def get_random_first_player(self): return random.randint(0, 1) def fix_spot(self, row, col, player): self.board[row][col] = player def is_player_win(self, player): win = None n = len(self.board) # 检查行 for i in range(n): win = True for j in range(n): if self.board[i][j] != player: win = False break if win: return win # 检查列 for i in range(n): win = True for j in range(n): if self.board[j][i] != player: win = False break if win: return win # 检查对角线 win = True for i in range(n): if self.board[i][i] != player: win = False break if win: return win win = True for i in range(n): if self.board[i][n - 1 - i] != player: win = False break if win: return win return False def is_board_filled(self): for row in self.board: for item in row: if item == '-': return False return True def swap_player_turn(self, player): return 'X' if player == 'O' else 'O' def show_board(self): # 打印每行,用竖线分隔格子 for idx, row in enumerate(self.board): print(' | '.join(row)) # 最后一行不打印分隔线 if idx != len(self.board) - 1: print('---|---|---') def start(self): self.create_board() player = 'X' if self.get_random_first_player() == 1 else 'O' while True: print(f"玩家 {player} 回合") # 调整行列提示格式,和棋盘匹配 print("1 | 2 | 3") print("---|---|---") self.show_board() # 获取用户输入 row, col = list( map(int, input("输入行号和列号(用空格分隔): ").split())) print() # 落子 self.fix_spot(row - 1, col - 1, player) # 检查当前玩家是否获胜 if self.is_player_win(player): print(f"玩家 {player} 获胜!") break # 检查是否平局 if self.is_board_filled(): print("平局!") break # 切换玩家 player = self.swap_player_turn(player) # 显示最终棋盘 print() self.show_board() # 启动游戏 tic_tac_toe = TicTacToe() tic_tac_toe.start()
修改说明
- show_board方法:使用
' | '.join(row)将每行的格子用竖线连接,同时在除最后一行外的每行下方打印---|---|---作为行分隔线,实现清晰的棋盘格子区分。 - start方法:将顶部的行列提示从
1 2 3和-----修改为1 | 2 | 3和---|---|---,与棋盘格式保持一致,让用户更直观地对应行列号。
内容的提问来源于stack exchange,提问作者Vurgun Abbasov
相关产品推荐
相关产品推荐

