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

Python井字棋游戏重新赋值后变量不显示变化问题求助

代码问题排查

你代码存在三个核心问题,直接导致棋盘无法更新:

  • 局部变量与全局变量隔离:tabla()函数每次被调用时,都会在内部重新创建局部变量p1-p9并赋值为空格,你在函数外修改的p1和函数内部的p1不是同一个变量,渲染时永远用的是函数内的空值。
  • 玩家符号分配逻辑完全错误:
    • 函数没有接收用户输入的选择作为参数,判断条件写的是assigments_of_x_or_o == 'X',相当于拿函数本身和字符串做对比,永远不可能成立
    • 条件判断语法错误:a == 'X' or 'x'的实际执行逻辑是(a == 'X') or ('x'),非空字符串的布尔值永远为True,第一个判断会无条件触发
    • 函数内定义的player1、player2是局部变量,函数外无法访问
  • 位置判断逻辑不生效:input()返回的是字符串类型,直接和整数1对比永远为False,给p1赋值的代码根本不会执行。
修复后可运行的参考代码
# 全局定义棋盘位置变量
p1 = p2 = p3 = p4 = p5 = p6 = p7 = p8 = p9 = ' '
player1 = ''
player2 = ''

# 渲染棋盘
def tabla():
    print([f'{p1}',f'{p2}',f'{p3}'])
    print([f'{p4}',f'{p5}',f'{p6}'])
    print([f'{p7}',f'{p8}',f'{p9}'])

# 分配玩家符号
def assigments_of_x_or_o(choose):
    global player1, player2
    if choose.lower() == 'x':
        player1 = 'X'
        player2 = 'O'
        print('Player1 will be X, and player2 will be O!')
    elif choose.lower() == 'o':
        player1 = 'O'
        player2 = 'X'
        print('Player1 will be O, and player2 will be X!')


# 程序主逻辑
print('Welcome to my game!\nPlease select the following!')
x_ili_o = input('Do you want to be X or O? ')
assigments_of_x_or_o(x_ili_o)

tabla()
koj_place = int(input('Player1, what place?(1-9): '))
if koj_place == 1:
    p1 = player1
tabla()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:36:02