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

Python井字棋项目elif分支永不触发问题排查

井字棋状态判断程序问题修复

问题根因

  • 条件分支结构错误:你将判断「游戏未完成」「平局」的elif块,和前序判断「是否存在赢家」的if块设置为同级互斥关系。初始状态下Winner为空、Impossible为False,if Winner == "" and Impossible is False条件默认成立,程序只会执行该if块内的赢家校验逻辑,永远不会进入后续的elif分支。
  • 缺少双赢家异常校验:如果X和O同时形成三连,属于不可能的游戏状态,当前逻辑未做对应判断。

修复后代码

n = input("Enter cells: ")
number_grid = []
winner_list = []
print("---------")
count = {"X": 0, "O": 0, "_": 0}
# 生成网格同时统计棋子数量
for i in range(0, len(n), 3):
    print("|", n[i], n[i+1], n[i+2], "|")
    number_grid.append([n[i], n[i+1], n[i+2]])
    count[n[i]] += 1
    count[n[i+1]] += 1
    count[n[i+2]] += 1
print("---------")
# 校验棋子数量差是否异常
impossible = False
if abs(count["X"] - count["O"]) >= 2:
    impossible = True
# 校验所有获胜情况
# 行校验
for rows in range(3):
    if number_grid[rows][0] == number_grid[rows][1] == number_grid[rows][2] != "_":
        winner_list.append(number_grid[rows][0])
# 列校验
for columns in range(3):
    if number_grid[0][columns] == number_grid[1][columns] == number_grid[2][columns] != "_":
        winner_list.append(number_grid[0][columns])
# 对角线校验
if number_grid[0][0] == number_grid[1][1] == number_grid[2][2] != "_":
    winner_list.append(number_grid[0][0])
if number_grid[0][2] == number_grid[1][1] == number_grid[2][0] != "_":
    winner_list.append(number_grid[0][2])
# 存在两个赢家也是异常情况
if len(winner_list) > 1:
    impossible = True
# 输出结果
if impossible:
    print("Impossible")
elif len(winner_list) == 1:
    print(f"{winner_list[0]} wins")
elif count["_"] != 0:
    print("Game not finished")
else:
    print("Draw")

修改说明

  1. 拆分了原有的互斥分支结构,将赢家校验和后续状态判断拆分为独立逻辑,解决无法进入elif的问题
  2. 用列表存储获胜方,可直接识别同时存在多个赢家的异常场景
  3. 调整了判断优先级:先校验所有不可能情况,再判断是否有赢家,最后根据剩余空格判断是游戏未结束还是平局

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:39:04