Python Minimax函数为TicTacToe中所有可能的移动返回相同的计算结果

Python Minimax函数为TicTacToe中所有可能的移动返回相同的计算结果,python,python-2.7,tic-tac-toe,minimax,Python,Python 2.7,Tic Tac Toe,Minimax,在主程序循环中,for循环通过TicTacToe板中的每个空位置,然后在每个位置上应用minimax函数,以给出特定移动的评估。但是,对于基于输入的每个特定板配置,它会对所有空白点返回相同的评估 董事会=[“X”,1,2, 3“O”,5, 6 , 7, 8] human=“O” robot=“X” def评估(委员会): 如果(获胜(董事会、机器人)): 返回+10 elif(获胜(董事会,人力)): 返回-10 其他: 返回0 def minimax(空位、深度、最大化玩家): 如果深度==

在主程序循环中,for循环通过TicTacToe板中的每个空位置,然后在每个位置上应用minimax函数,以给出特定移动的评估。但是,对于基于输入的每个特定板配置,它会对所有空白点返回相同的评估


董事会=[“X”,1,2,
3“O”,5,
6 , 7, 8]
human=“O”
robot=“X”
def评估(委员会):
如果(获胜(董事会、机器人)):
返回+10
elif(获胜(董事会,人力)):
返回-10
其他:
返回0
def minimax(空位、深度、最大化玩家):
如果深度==0或透镜(空点)==0:
评估=评估(委员会)
#打印(f'评估函数返回:{evaluation(board)}')
#退货评估(委员会)
返回评估
如果您是您的玩家:
maxEval=-1000000
空点=列表(过滤器(λ点:(点!=“O”和点!=“X”),板)
#打印(f'从最大化玩家{empty_spots}'测试空点)
#为了那个职位的孩子
对于空点中的点:
板[点]=机器人
eval=最小最大值(空点,深度-1,假)
#然后移除移动,并将其替换为数字
板[点]=点
maxEval=最大值(maxEval,eval)
#打印(f'maxEval为{maxEval}')
#打印(f'maxEval为{maxEval}')
返回最大值
其他:
minEval=+1000000
空点=列表(过滤器(λ点:(点!=“O”和点!=“X”),板)
#打印(f'从最小化玩家{empty_spots}测试空点})
#对于该职位的每个孩子
对于空点中的点:
板[点]=人
eval=最小最大值(空点,深度-1,真)
#然后去除斑点
板[点]=点
minEval=最小值(minEval,eval)
#打印(f'themineval是{minEval}')
返回minEval
#主程序循环
虽然(正确):
虽然(正确):
尝试:
human_input=int(输入(“请输入一个从0到8的整数:”)
#这应该只接收空点

如果(human_input>=0且human_input,让我们看看程序中的这个循环:

for spot in empty_spots:
    spot_eval = minimax(empty_spots, len(empty_spots), True)
    print(f'The spot eval for {spot} is {spot_eval}')
    moves.append(spot_eval)
请注意,对
minimax
函数的调用在for循环的所有迭代中都是相同的,因为它不依赖于
spot
变量。因此基本上,您在这个循环中调用
len(空点)
函数(都是相同的)。因此,
移动
数组将填充相同的值,该值等于

极小极大值(空点,len(空点),真)

您是否已通过调试器运行此程序,并验证您的每个假设是否与生成的结果相匹配?不太可能有人会花时间为您调试这么多代码