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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:45:03