简单初始化变量时出错



在组装一个Boggle解算器时,我遇到了一些奇怪的行为,我希望有人能向我解释。我得到了返回一组可能单词的函数,而我似乎缺少的只是一种方法,可以防止解算器包含在一场戏中两次访问同一个方块时创建的单词。我试图通过迭代全局变量seen(我知道这是不正确的),在当前播放中创建一个已经访问过的方块列表(表示棋盘的字符串中的索引号列表),该变量用于记忆以前探索过的路径。然而,只需使用以下值初始化变量即可:

previous_ind = [j for (pre, j) in seen]

在递归函数find_bwords内以某种方式影响索引变量i并导致源自find_bwords中最后一行的IndexErrors。

seen = set() #(prefix, index) pairs
def boggle_words(board, minlength=3):
    "Find all the words on this Boggle board; return as a set of words."
    results = set()
    for i, sq in enumerate(board):
        if is_letter(sq):
            find_bwords(board, sq, i, results, minlength)
    return results
def find_bwords(board, pre, start, results, minlength): #adds to seen and results
    global seen
    #prev_ind = [j for (pre, j) in seen]  <---mystery culprit
    if (pre, start) not in seen:
        seen.add((pre, start))
        if len(pre) >= minlength and pre in WORDS:
            results.add(pre)
        if pre in PREFIXES:
            for i in neighbors(start, int(sqrt(len(board)))):
                #print 'index: ', i
                find_bwords(board, pre+board[i], i, results, minlength)

以下是在引入prev_ind:之前打印索引的一部分

index:  0
index:  1
index:  2
index:  6
index:  8
index:  12
index:  13
index:  14
index:  1
index:  2

以下是之后的部分

index:  0
index:  -7
index:  -14
index:  -21
index:  -28
index:  -35
index:  -42

为什么会发生这种情况?

需要明确的是,我并不是在寻找这个任务的解决方案,我已经用另一种方式解决了它,我只想了解在这种情况下发生了什么。

问题出在您分配给pre的这一行上,覆盖了它以前的值:

prev_ind = [j for (pre, j) in seen]  # <---mystery culprit

试着把它改成这个,它应该会像你期望的那样工作:

prev_ind = [j for (pre2, j) in seen] 

相关内容

  • 没有找到相关文章

最新更新