Python井字棋(Tic-Tac-Toe)代码:输入循环未触发,无法获取用户输入
井字棋enter_move函数无输入提示问题解决
核心原因
你定义了enter_move函数,但从未在代码中调用它,所以程序不会执行到输入逻辑,自然不会出现输入提示。
其他代码错误及修复
除了未调用函数,你的代码还有几处关键错误:
- 落子占用判断逻辑错误:原代码中
elif move not in [0] and move not in [1] and move not in [2]完全不符合需求,应该检查对应棋盘位置是否仍为数字(未被X/O占用)。 - 赋值运算符错误:所有
board[x][y] == "O"用了比较运算符==,应该改为赋值运算符=才能修改棋盘。 - 遗漏move=5的处理:原代码未处理用户选择5的情况,需要补充判断。
修复后的完整代码
board = [["1", "2", "3"], ["4", "X", "6"], ["7", "8", "9"]] def display_board(board): print("+-------+-------+-------+") print("| | | |") print("| " + board[0][0] + " | " + board[0][1] + " | " + board[0][2] + " |") print("| | | |") print("+-------+-------+-------+") print("| | | |") print("| " + board[1][0] + " | " + board[1][1] + " | " + board[1][2] + " |") print("| | | |") print("+-------+-------+-------+") print("| | | |") print("| " + board[2][0] + " | " + board[2][1] + " | " + board[2][2] + " |") print("| | | |") print("+-------+-------+-------+") def enter_move(board): while True: try: move = int(input("Please pick a number within the range of squares (1-9): ")) except ValueError: print("Error: please enter a valid integer!") continue if move < 1 or move > 9: print("Error: please pick a number 1 through 9!") continue # 转换move为棋盘坐标 row = (move - 1) // 3 col = (move - 1) % 3 if board[row][col] in ["X", "O"]: print("Sorry, that square is already taken! Try another move.") continue # 落子 board[row][col] = "O" break # 调用函数:先显示棋盘,再获取用户输入 display_board(board) enter_move(board) # 再次显示棋盘,查看落子结果 display_board(board)
修复说明
- 添加函数调用:在代码末尾调用
display_board(board)和enter_move(board),触发输入逻辑。 - 优化输入判断:增加
try-except捕获非整数输入,避免程序崩溃。 - 简化坐标转换:用数学计算直接将1-9的数字转为棋盘行列索引,无需大量elif判断。
- 修正占用判断:检查对应棋盘位置是否为X/O,确保逻辑正确。
内容的提问来源于stack exchange,提问作者Oran Kelly
相关产品推荐
相关产品推荐

