为什么这个功能不能提供一致的输出?

时间:2014-09-09 20:50:33

标签: python dictionary set

我正在制作一个井字游戏的AI,只是为了好玩。我创建了一个后继函数,它返回一个以开始状态为键的字典,以及紧随其后的所有状态作为值。

据我所知,函数工作正常(虽然我仍然需要删除对称状态),但由于某种原因,每次运行函数时,后继状态的元组都处于不同的顺序。我得到了相同的价值观,但他们被炒了。

from itertools import *

def successors(state):
    vars = [0]*state.count(0)
    vars[0] = 'x'
    vars[1] = 'o'
    vars = list(set(permutations(vars)))
    state = tuple([state[i:i+3] for i in range(0, len(state), 3)])
    states = []
    for var in vars:
        new_board = []
        for row in state:
            new_row = []
            for tile in row:
                if tile != 0:
                    new_row.append(tile)
                else:
                    new_row.append(var[0])
                    var = var[1:]
            new_board.append(tuple(new_row))
        states.append(tuple(new_board))
    return {state:states}


board = (0,0,0,
         0,0,0,
         0,0,0)

print(successors(board))

某个地方是否有一个未被重置的变量?

1 个答案:

答案 0 :(得分:3)

这可能是因为你这样做:

vars = list(set(permutations(vars)))

此处的顺序是任意的,由于散列随机化,可能会因一次运行而异。要禁用它,请将PYTHONHASHSEED环境变量设置为常量值 - 例如0