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

Python开发井字棋游戏遇故障:选择格子后无法显示X/O

井字棋落子不显示问题修复

问题根源

你定义的BOARD是静态字符串,仅在程序启动时基于初始的SPACES数组生成一次。后续修改SPACES中的元素时,BOARD不会自动同步更新,导致打印的始终是初始空棋盘。

修复方案

将棋盘的生成逻辑封装成一个函数,每次循环打印前调用该函数,基于最新的SPACES数组重新生成棋盘字符串。

修正后的完整代码

import random

TURN = 1

SPACES = [
        ' ',' ',' ',
        ' ',' ',' ',
        ' ',' ',' '
        ]

def get_board():
    return (' ' + SPACES[0] + ' ║ ' + SPACES[1] + ' ║ ' + SPACES[2] + '\n'
            + '═══╬═══╬═══\n'
            + ' ' + SPACES[3] + ' ║ ' + SPACES[4] + ' ║ ' + SPACES[5] + '\n'
            + '═══╬═══╬═══\n'
            + ' ' + SPACES[6] + ' ║ ' + SPACES[7] + ' ║ ' + SPACES[8])

RUNNING = True

while RUNNING:
    print('\n\n\n\n\n\n' + get_board())
    try:
        user = int(input('P' + str(TURN) + ': '))
        if not 0 <= user <= 8:
            print("请输入0-8之间的数字!")
            continue
    except ValueError:
        print("请输入有效的数字!")
        continue
    
    if TURN == 1:
        if SPACES[user] == ' ':
            SPACES[user] = 'O'
            TURN = 2
        else:
            print("该位置已被占用,请重新选择!")
    
    elif TURN == 2:
        if SPACES[user] == ' ':
            SPACES[user] = 'X'
            TURN = 1
        else:
            print("该位置已被占用,请重新选择!")

关键改动说明

  1. 新增get_board()函数:每次调用都会基于当前SPACES的状态生成最新的棋盘字符串,确保落子后棋盘能实时更新。
  2. 输入校验:添加了数字转换异常处理和范围检查,避免用户输入非数字或超出0-8范围的内容导致程序崩溃。
  3. 优化条件判断:将第二个if改为elif,避免切换回合后重复执行判断逻辑。

内容的提问来源于stack exchange,提问作者Casonator

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:17:29