You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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)

关键修改点

  1. 修复尺寸判断逻辑:将dimensions从字符串列表改为整数集合,解决原代码中整数与字符串类型不匹配导致的判断错误;同时非法尺寸直接返回,防止后续计算出错。
  2. 按行提取元素:利用切片board[row_idx * n : (row_idx + 1) * n]直接提取整行元素,比逐列索引更简洁高效,避免原代码倒序取元素的问题。
  3. 统一行打印格式:用' | '.join(current_row)将一行元素拼接成目标格式的字符串,解决原代码每个元素单独换行的问题。
  4. 匹配分隔线长度:用'-' * len(row_str)生成与行长度一致的分隔线,保证棋盘格式对齐。
  5. 移除多余空行:删除原代码中多余的换行打印,避免棋盘出现大量空白。

内容的提问来源于stack exchange,提问作者Vijay OnAmazon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 04:07:39