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("该位置已被占用,请重新选择!")
关键改动说明
- 新增
get_board()函数:每次调用都会基于当前SPACES的状态生成最新的棋盘字符串,确保落子后棋盘能实时更新。 - 输入校验:添加了数字转换异常处理和范围检查,避免用户输入非数字或超出0-8范围的内容导致程序崩溃。
- 优化条件判断:将第二个
if改为elif,避免切换回合后重复执行判断逻辑。
内容的提问来源于stack exchange,提问作者Casonator
相关产品推荐
相关产品推荐

