虽然把一个Boggle解算器放在一起,但我遇到了一些奇怪的行为,我希望有人能向我解释。我得到了返回一组可能的单词的功能,而我似乎缺少的一种方法是防止解算者在剧本中包含两次访问同一方格创建的单词。我尝试通过遍历全局变量seen
(我知道这将是不正确的)来创建当前播放中已经访问过的正方形的列表(在表示该板的字符串内的索引号列表),该全局变量用于先前探索的路径。然而,简单地初始化变量使用那些值:简单地初始化一个变量的错误?
previous_ind = [j for (pre, j) in seen]
递归函数find_bwords
内,以某种方式影响索引变量i
并导致IndexErrors从find_bwords最后一行而产生。
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
这究竟是为什么?
要清楚的是,我并不是在寻找解决方案来完成这项任务,我以另一种方式解决了这个问题,我只是想了解在这种情况下发生了什么。
灿你粘贴异常的追踪?理想情况下,你能提供一个可重复的例子(即,一个板,预,开始等)? – 2012-07-17 21:38:44
另外,为什么不在代码中描述的'previous_ind'行?代码位于哪里?我相信这条线实际上并没有影响'我'的价值。 – 2012-07-17 21:41:09
@DavidRobinson它在代码中,在find_bwords中的第3行注释掉了 – 2012-07-17 21:45:52