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

Python实现带偏移交替行的棋盘样式字符串生成函数求助

问题描述

我需要编写一个Python函数,根据输入数字返回由*和空格组成的方形棋盘样式字符串。预期输出示例如下:

board_of_5 = (
    ' * * \n'
    '* * *\n'
    ' * * \n'
    '* * *\n'
    ' * * \n'
)
    
board_of_10 = (
    ' * * * * *\n'
    '* * * * * \n'
    ' * * * * *\n'
    '* * * * * \n'
    ' * * * * *\n'
    '* * * * * \n'
    ' * * * * *\n'
    '* * * * * \n'
    ' * * * * *\n'
    '* * * * * \n'
)

当前代码存在问题:输出内容会挤在单行,且交替行没有偏移效果:

def get_playing_board(num):
    string = ''
    for i in range(num):
        for j in range(num):
            if j % 2 == 0:
                string += ' '
            elif j % 2 != 0:
                string += '*'
        print(string)
    return string

get_playing_board(5)

请问如何添加偏移和换行符?如何正确遍历行?我的思路是根据奇偶性添加*或空格,但无法得到预期的棋盘样式。

解决方案

原代码的核心问题

  • 全局字符串string未在每行循环后重置,导致每行内容累加之前所有行的字符,输出越来越长
  • 未根据行的奇偶性调整起始字符,所有行的字符排列完全一致,没有偏移
  • 每行结束后未添加换行符,导致所有内容连在一起

修正后的代码

def get_playing_board(num):
    board = []
    for i in range(num):
        row = []
        # 根据行号奇偶性决定起始字符
        start_with_space = i % 2 == 0
        for j in range(num):
            if (j % 2 == 0 and start_with_space) or (j % 2 != 0 and not start_with_space):
                row.append(' ')
            else:
                row.append('*')
        # 将当前行转为字符串,添加换行符后加入board列表
        board.append(''.join(row) + '\n')
    # 拼接所有行并返回
    return ''.join(board)

# 测试示例
board_of_5 = get_playing_board(5)
print(board_of_5)

关键逻辑说明

  • 用列表board存储每一行的字符串,避免字符串累加的性能问题和内容错乱
  • 每行根据行号i的奇偶性切换起始字符:偶数行(i=0,2,4...)以空格开头,奇数行以*开头
  • 列循环时,结合当前列号j的奇偶性与起始字符规则,决定添加空格还是*
  • 每行构建完成后添加换行符\n,最后将所有行拼接成完整的棋盘字符串

简化写法(可选)

可以用生成器表达式进一步精简代码,逻辑与上述方案一致:

def get_playing_board(num):
    return ''.join(
        ''.join(' ' if (j % 2 == 0 and i % 2 == 0) or (j % 2 != 0 and i % 2 != 0) else '*' for j in range(num)) + '\n'
        for i in range(num)
    )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:50:40