Python实现井字棋X落子位置存储打印功能 求代码优化建议
井字棋落子存储与棋盘打印优化
现有代码存在几个可修正的问题:
- 棋盘数组
game_board定义在print_board()函数内部,属于局部变量,每次调用函数都会重置为初始状态,无法持久存储用户的落子记录 - 输入转整数的逻辑写在了
try语句块之外,若用户输入非数字内容,转换时会直接抛出异常,无法被下方的except捕获,异常处理逻辑完全失效 - 输入校验通过后没有执行落子逻辑,也没有更新打印最新的棋盘状态
- 没有重试机制,用户输入错误后程序直接终止,需要重新运行才能再次输入
优化后可运行代码
# 全局存储棋盘状态,所有落子、打印操作共用该数组 game_board = ["-", "-", "-", "-", "-", "-", "-", "-", "-"] def print_board(): print(game_board[0] + " | " + game_board[1] + " | " + game_board[2]) print(game_board[3] + " | " + game_board[4] + " | " + game_board[5]) print(game_board[6] + " | " + game_board[7] + " | " + game_board[8]) # 首次打印初始棋盘 print_board() # 循环接收输入,直到输入合法才继续 while True: try: selection = int(input("Select a square: ")) if selection > 9 or selection < 1: print("Sorry, please select a number between 1 and 9.") continue # 可选补充:判断位置是否已被占用 # if game_board[selection - 1] != "-": # print("该位置已被占用,请重新选择") # continue break except ValueError: print("Oops! That's not a number. Try again...") # 用户输入的1-9对应数组索引0-8,需要减1匹配位置 game_board[selection - 1] = "X" # 打印落子后更新的棋盘 print("落子完成后的棋盘:") print_board()
主要优化点说明
- 将棋盘数组提升到全局作用域,保证落子数据可以持久存储
- 把输入读取、类型转换逻辑移入
try块,确保非数字输入的异常可以被正常捕获处理 - 增加循环重试逻辑,用户输入错误(非数字、超出1-9范围、位置被占用)时自动提示重新输入,无需重启程序
- 校验通过后自动在对应位置写入
X,并重新打印更新后的棋盘
内容的提问来源于stack exchange,提问作者e-ratic assassin
相关产品推荐
相关产品推荐

