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

Python控制台井字棋Win判定bug:两子连线即判定玩家获胜问题

问题修复方案

核心错误原因

你的井字棋提前判定获胜的根本原因是Win函数中的多条件相等判断写法不符合Python语法逻辑。
你写的if Board[0] and Board[1] and Board[2] == "X" 等价于 if (bool(Board[0]) == True) and (bool(Board[1]) == True) and (Board[2] == "X")。初始棋盘的数字1-9在布尔判断中都为真,所以只要某条获胜线的最后一个格子被填为X/Y,不管前面两个是未修改的数字还是已填充的标记,都会触发获胜判定,自然会出现仅下两步就判赢的问题。

修复代码

直接修改原判断逻辑版

def Win():
    # 判定玩家1(X)获胜
    if (Board[0] == "X" and Board[1] == "X" and Board[2] == "X") or \
       (Board[3] == "X" and Board[4] == "X" and Board[5] == "X") or \
       (Board[6] == "X" and Board[7] == "X" and Board[8] == "X") or \
       (Board[0] == "X" and Board[3] == "X" and Board[6] == "X") or \
       (Board[1] == "X" and Board[4] == "X" and Board[7] == "X") or \
       (Board[2] == "X" and Board[5] == "X" and Board[8] == "X") or \
       (Board[0] == "X" and Board[4] == "X" and Board[8] == "X") or \
       (Board[2] == "X" and Board[4] == "X" and Board[6] == "X"):
        print("Player 1 Won")
        return False
    # 判定玩家2(Y)获胜
    elif (Board[0] == "Y" and Board[1] == "Y" and Board[2] == "Y") or \
         (Board[3] == "Y" and Board[4] == "Y" and Board[5] == "Y") or \
         (Board[6] == "Y" and Board[7] == "Y" and Board[8] == "Y") or \
         (Board[0] == "Y" and Board[3] == "Y" and Board[6] == "Y") or \
         (Board[1] == "Y" and Board[4] == "Y" and Board[7] == "Y") or \
         (Board[2] == "Y" and Board[5] == "Y" and Board[8] == "Y") or \
         (Board[0] == "Y" and Board[4] == "Y" and Board[8] == "Y") or \
         (Board[2] == "Y" and Board[4] == "Y" and Board[6] == "Y"):
        print("Player 2 Won")
        return False
    else:
        return True

简化优化版(推荐)

预先定义所有获胜线的索引组合,循环判断减少代码冗余,避免手写判断的语法错误:

def Win():
    # 所有获胜线的索引:横、竖、斜
    win_lines = [
        [0,1,2], [3,4,5], [6,7,8],
        [0,3,6], [1,4,7], [2,5,8],
        [0,4,8], [2,4,6]
    ]
    for line in win_lines:
        a, b, c = line
        if Board[a] == Board[b] == Board[c] == "X":
            print("Player 1 Won")
            return False
        if Board[a] == Board[b] == Board[c] == "Y":
            print("Player 2 Won")
            return False
    return True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 20:24:03