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

为何Python中我的变量winning无法被重新赋值?

问题解答:变量赋值失败且无法访问的问题

你代码里有两个核心问题导致预期结果不对,逐个说明:

1. 用了比较运算符而非赋值运算符

你写的winning == ''和winning == 'True'是比较操作,只会判断两边是否相等,不会给变量赋值。真正给变量赋值要使用单等号=,比如:

winning = ''  # 初始化变量
# 满足条件时
winning = True  # 这里建议用布尔值True,不是字符串'True',更符合Python规范

2. 变量作用域问题

你在winningcheck函数内部定义的winning是局部变量,函数执行完后这个变量就会被销毁,外部的print(winning)根本访问不到它。解决方法有两种,优先推荐第一种:

方法一:让函数返回变量值(最规范)

修改函数,让它把winning的值返回,外部接收这个返回值:

def winningcheck(board):
    winning = False  # 初始用布尔值,更合理
    if board[1] == board[2] == board[3] and board[1] != ' ':  # 加非空判断,避免三个空格误判获胜
        print('The game has been won')
        winning = True
    else:
        print('The game has not been won')
    return winning  # 返回变量

test = ['#', 'X ', 'X ', 'X ', ' ', ' ', ' ', ' ', ' ', ' ']
winning = winningcheck(test)  # 接收函数返回的结果
print(winning)

方法二:使用全局变量(不推荐,容易引发其他问题)

如果一定要在函数外部直接访问,需要用global关键字声明变量是全局的:

winning = False  # 全局变量初始化

def winningcheck(board):
    global winning  # 声明使用全局变量
    if board[1] == board[2] == board[3] and board[1] != ' ':
        print('The game has been won')
        winning = True
    else:
        print('The game has not been won')
        winning = False

test = ['#', 'X ', 'X ', 'X ', ' ', ' ', ' ', ' ', ' ', ' ']
winningcheck(test)
print(winning)

额外提示

判断获胜的逻辑里最好加上board[1] != ' '的判断,不然如果三个位置都是空格,也会触发获胜提示,这显然不符合游戏逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:37:08