为何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
相关产品推荐
相关产品推荐

