如何解决我的递归函数似乎正在使用原始列表,而不是在python中创建一个新列表
我是python的新手,我一直在尝试为tic-tac-toe编写minimax算法。但是我无法让我的程序返回期望值,并且不确定发生了什么。我的minimax方法应该返回1,但是几乎坏了。我相信它使用的是原始列表,而不是创建新列表。我尝试使用copy(),但是它没有用,除非我使用错误。这是我的代码:
import copy
def checkWin(board):
if board == [['y','x','y'],['x','y','x'],'x']]:
return 't'
if board == [['y','y']]:
return 'y'
return '0'
def minimax(board,player):
status = checkWin(board)
if status == 't':
return 0
if status == 'y':
return 1
if player == 'y':
value = -100000
for i in range(3):
for k in range(3):
if board[i][k] == '':
board2 = copy.deepcopy(board)
board2[i][k] == 'y'
bestMove = minimax(board2,'x')
if bestMove > value:
value = bestMove
return value
else:
value = 100000
for i in range(3):
for k in range(3):
if board[i][k] == '':
board2 = copy.deepcopy(board)
board2[i][k] == 'x'
bestMove = minimax(board2,'y')
if bestMove < value:
value = bestMove
return value
board = [
['y','']
]
bestMove = minimax(board,'y')
print(bestMove)
感谢您的帮助。
编辑。多亏有帮助的人,对不起,我真是个白痴。但是,我将确保学习如何更仔细,更彻底地调试程序。
解决方法
您要分配的值不能比较,board2[i][k] == 'x'
应该与y相同board2[i][k] = 'x'
。
import copy
def checkWin(board):
if board == [['y','x','y'],['x','y','x'],'x']]:
return 't'
if board == [['y','y']]:
return 'y'
return '0'
def minimax(board,player):
status = checkWin(board)
if status == 't':
return 0
if status == 'y':
return 1
if player == 'y':
value = -100000
for i in range(3):
for k in range(3):
if board[i][k] == '':
board2 = copy.deepcopy(board)
board2[i][k] = 'y'
bestMove = minimax(board2,'x')
if bestMove > value:
value = bestMove
return value
else:
value = 100000
for i in range(3):
for k in range(3):
if board[i][k] == '':
board2 = copy.deepcopy(board)
board2[i][k] = 'x'
bestMove = minimax(board2,'y')
if bestMove < value:
value = bestMove
return value
board = [
['y','']
]
bestMove = minimax(board,'y')
print(bestMove)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。