Python井字棋实现:如何在循环最后迭代跳过指定操作?
井字棋棋盘打印优化:移除循环中的if语句
我在用Python开发简易井字棋项目,用循环打印棋盘时遇到两个问题——行尾多余的"|",还有最后一行下方多出分隔线。现在已经用if语句解决了,但想去掉这些if语句,问问有没有办法在循环最后一次迭代时跳过部分操作。
原始代码
def print_board(): print(" a b c") print("") print("0 " + coords[columns[0]][rows[0]] + " | " + coords[columns[1]][rows[0]] + " | " + coords[columns[2]][rows[0]]) print(" -------------") print("1 " + coords[columns[0]][rows[1]] + " | " + coords[columns[1]][rows[1]] + " | " + coords[columns[2]][rows[1]]) print(" -------------") print("2 " + coords[columns[0]][rows[2]] + " | " + coords[columns[1]][rows[2]] + " | " + coords[columns[2]][rows[2]])
改进后(带if语句)的代码
def print_board(): print(" a b c", end="\n\n") for r in range(3): print(str(r) + " ", end="") for c in range(3): print(coords[columns[c]][rows[r]], end="") if c != 2: print(" | ", end="") print("\n") if r != 2: print(" -------------")
移除所有if语句的解决方案
方案1:利用字符串join方法(最简洁)
通过字符串拼接替代循环内的条件判断,join方法只会在元素之间插入分隔符,天然避免末尾多余符号:
def print_board(): print(" a b c\n") # 生成每一行的完整字符串 board_rows = [] for r in range(3): # 收集当前行的所有棋子 row_cells = [coords[columns[c]][rows[r]] for c in range(3)] # 用" | "连接棋子,自动处理列分隔符 board_rows.append(f"{r} {' | '.join(row_cells)}") # 用分隔线连接所有行,自动避免最后一行下方的分隔线 print('\n -------------\n'.join(board_rows))
方案2:拆分循环处理前两行与最后一行
把前两行和最后一行分开处理,前两行打印后加分隔线,最后一行单独输出,完全不用条件判断:
def print_board(): print(" a b c\n") # 打印前两行,每行后加分隔线 for r in range(2): row_cells = [coords[columns[c]][rows[r]] for c in range(3)] print(f"{r} {' | '.join(row_cells)}") print(" -------------") # 单独打印最后一行,不加分隔线 r = 2 row_cells = [coords[columns[c]][rows[r]] for c in range(3)] print(f"{r} {' | '.join(row_cells)}")
说明
- 列分隔线问题:
' | '.join(row_cells)直接将每行的棋子用分隔符连接,不会在末尾产生多余的"|",彻底替代了判断列索引的if语句。 - 行分隔线问题:两种方案都通过字符串拼接或拆分循环的方式,避免了判断行索引的if语句,实现了在循环最后一次迭代时跳过分隔线打印的需求。
内容的提问来源于stack exchange,提问作者Thevin Jayawardena
相关产品推荐
相关产品推荐

