python-3.x - 在python中满足条件时无法退出
问题描述
我正在尝试在 python3 中制作井字游戏。我能够让游戏正常运行,但是当有人赢得游戏时,Ì 无法让代码终止。我尝试了很多方法,但都没有奏效:
def find_winner(board,gameIsOn):
if ((board[7]==board[8]==board[9]) and board[7]!= '') or ((board[4]==board[5]==board[6]) and board[4]!= '') or ((board[1]==board[2]==board[3]) and board[7]!= ''):
gameIsOn = False
print('winner!')
elif ((board[7]==board[4]==board[1]) and board[7]!= '') or ((board[8]==board[5]==board[2]) and board[8]!= '') or ((board[9]==board[6]==board[3]) and board[9]!= ''):
gameIsOn = False
print('winner!')
elif ((board[7]==board[5]==board[3]) and board[7]!= '') or ((board[9]==board[5]==board[1]) and board[7]!= ''):
gameIsOn = False
print('winner!')
这是我用来查明是否有人获胜的功能。如果有人赢了,则gameIsOn
变量设置为。False
否则就是True
。
while(gameIsOn):
if(active_Player == player_1):
position = int(input('Position?'))
player_input(board,active_Player,position)
print_board(board)
find_winner(board,gameIsOn)
active_Player = player_2
else:
position = int(input('Position?'))
player_input(board,active_Player,position)
print_board(board)
find_winner(board,gameIsOn)**
上面的代码是游戏的主体。忽略其他函数,如果有人赢得了比赛,该find_winner
函数应该将 的值设置为gameIsOn
。False
但即使有人获胜,游戏也不会终止。
有人可以帮忙吗?
解决方案
您将gameIsOn
变量传递给find_winner
函数,它在那里成为局部变量,因此更改gameIsOn
不会反映给调用者。您应该让 find_winner 将布尔值返回给调用者,并让调用者将返回值分配给gameIsOn
其范围内的变量。
def find_winner(board):
if ((board[7]==board[8]==board[9]) and board[7]!= '') or ((board[4]==board[5]==board[6]) and board[4]!= '') or ((board[1]==board[2]==board[3]) and board[7]!= ''):
return False
elif ((board[7]==board[4]==board[1]) and board[7]!= '') or ((board[8]==board[5]==board[2]) and board[8]!= '') or ((board[9]==board[6]==board[3]) and board[9]!= ''):
return False
elif ((board[7]==board[5]==board[3]) and board[7]!= '') or ((board[9]==board[5]==board[1]) and board[7]!= ''):
return False
return True
gameIsOn = True
while(gameIsOn):
if(active_Player == player_1):
position = int(input('Position?'))
player_input(board,active_Player,position)
print_board(board)
gameIsOn = find_winner(board)
active_Player = player_2
else:
position = int(input('Position?'))
player_input(board,active_Player,position)
print_board(board)
gameIsOn = find_winner(board)
active_Player = player_1
推荐阅读
- r - 根据常用值组合 R 中的数据框行
- laravel - 如何通过 API 创建好友请求
- javascript - 我们如何在 django 中的 onclick 函数中动态添加 id?
- matplotlib - 如何不填充 plt 多边形补丁
- javascript - 如何通过传递参数从列表数组中检索特定数据作为字符串?
- angular - tinyMCE 和来自 CDN 网络的 tinyMCE 显示扭曲的图标
- google-cloud-storage - Google Cloud Storage - 控制 bot 对公共文件的访问。限制 b 类操作
- php - 在提交表单时在帖子中显示“无法解码值”
- regex - 获取两位数之间的字符串
- python - .error:look-behind 需要固定宽度的模式(在加载 spacy 自定义模型时)