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")
修改说明
- 拆分了原有的互斥分支结构,将赢家校验和后续状态判断拆分为独立逻辑,解决无法进入
elif的问题 - 用列表存储获胜方,可直接识别同时存在多个赢家的异常场景
- 调整了判断优先级:先校验所有不可能情况,再判断是否有赢家,最后根据剩余空格判断是游戏未结束还是平局
内容的提问来源于stack exchange,提问作者Rodri R
相关产品推荐
相关产品推荐

