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
相关产品推荐
相关产品推荐

