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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:52:53