如何在Python中单行打印字符实现指定尺寸的井字棋棋盘?
问题描述
我正在开发一款井字棋游戏,期望的初始棋盘显示格式如下:
X | O | X --------- X | X | O --------- O | O | X
但我的程序当前打印格式如下:
X | O | X | # | O | X | # | O | X |
我需要实现目标打印格式,程序需支持行数和列数相等的棋盘(最大为5×5)。以下是我的代码:
import math def display_board(board): dimensions = ['4', '9','16','25'] elems = int(len(board)) if (elems in dimensions): print ('COLUMNS AND ROWS ARE EQUAL') else: print ('COL AND ROWS ARE NOT EQUAL') rows = int (math.sqrt(elems)) cols = rows for r in range (0,rows,1): for c in range (0,cols,1): print (' ' + board[elems-1] + ' |') elems = elems -1 print ('\n') brd = ['X','O','#','X','O','#','X','O','X'] display_board (brd)
修正后的代码及说明
修正后的代码
import math def display_board(board): elems_count = len(board) # 定义合法的N×N棋盘尺寸(N从2到5) valid_sizes = {4, 9, 16, 25} if elems_count in valid_sizes: print('COLUMNS AND ROWS ARE EQUAL') else: print('COL AND ROWS ARE NOT EQUAL') return # 非法尺寸直接终止函数,避免后续错误 n = int(math.sqrt(elems_count)) for row_idx in range(n): # 提取当前行的所有元素 current_row = board[row_idx * n : (row_idx + 1) * n] # 拼接成目标格式的行字符串 row_str = ' | '.join(current_row) print(row_str) # 打印分隔线,最后一行不需要 if row_idx != n - 1: print('-' * len(row_str)) brd = ['X','O','#','X','O','#','X','O','X'] display_board(brd)
关键修改点
- 修复尺寸判断逻辑:将
dimensions从字符串列表改为整数集合,解决原代码中整数与字符串类型不匹配导致的判断错误;同时非法尺寸直接返回,防止后续计算出错。 - 按行提取元素:利用切片
board[row_idx * n : (row_idx + 1) * n]直接提取整行元素,比逐列索引更简洁高效,避免原代码倒序取元素的问题。 - 统一行打印格式:用
' | '.join(current_row)将一行元素拼接成目标格式的字符串,解决原代码每个元素单独换行的问题。 - 匹配分隔线长度:用
'-' * len(row_str)生成与行长度一致的分隔线,保证棋盘格式对齐。 - 移除多余空行:删除原代码中多余的换行打印,避免棋盘出现大量空白。
内容的提问来源于stack exchange,提问作者Vijay OnAmazon
相关产品推荐
相关产品推荐

