井字棋play_turn函数错误排查求助:无法正确执行落子逻辑
井字棋play_turn函数错误排查与修正
你的代码存在三个关键问题,导致无法实现预期功能:
- 坐标合法性检查不完整:原代码只判断了
x >= 3或y >= 3,但没处理x或y为负数的情况(比如x=-1、y=-2这类无效坐标),不符合题目中坐标0-2的要求。 - 落子操作未执行就返回True:当格子为空时,
elif row[x] == ""直接返回True,但此时还没把piece放到棋盘上,导致棋盘状态完全没变化,和预期结果不符。 - 有效代码不可达:
row[x] = piece写在了所有return语句之后,无论什么情况都不会被执行,这是典型的逻辑顺序错误。
修正后的代码
def play_turn(game_board: list, x: int, y: int, piece: str): # 先检查坐标是否在0-2的合法范围内 if not (0 <= x <= 2 and 0 <= y <= 2): return False row = game_board[y] # 检查目标格子是否已被X或O占用 if row[x] in ("X", "O"): return False # 执行落子操作 row[x] = piece # 落子成功返回True return True
修正说明
- 完善坐标合法性判断,确保x和y都处于0到2的区间内(包含边界值)。
- 调整逻辑顺序:先排除所有无效情况(坐标非法、格子已占),确认合法后再执行落子,最后返回True,保证落子动作能被执行。
- 简化占用判断逻辑,用
in ("X", "O")替代重复的或条件,代码更简洁。
内容的提问来源于stack exchange,提问作者user19550315
相关产品推荐
相关产品推荐

