2015-02-06 123 views
1

我想从this网站了解解决Python中的Sudoku问题。我无法理解“搜索”功能,特别是“搜索”中“某些”功能的应用。For循环作为python中函数的输入参数

def search(values): 
"Using depth-first search and propagation, try all possible values." 
if values is False: 
    return False ## Failed earlier 
if all(len(values[s]) == 1 for s in squares): 
    return values ## Solved! 
## Chose the unfilled square s with the fewest possibilities 
n,s = min((len(values[s]), s) for s in squares if len(values[s]) > 1) 
return some(search(assign(values.copy(), s, d)) 
    for d in values[s]) 

def some(seq): 
    "Return some element of seq that is true." 
    for e in seq: 
     if e: return e 
    return False 

values这是search的输入是一个字典(键:该方可能值的字符串:每个正方形,值的名称)。在search我们试图找到一个正方形(一个正方形是一个在Sudoku中的一个数字的占位符),它具有最少的可能值填充。然后,为每个值调用assign函数。 assign的输出可以是false或者可以是新的字典values。我想知道这里的“一些”功能的目的是什么?

回答

2

这部分:

search(assign(values.copy(), s, d)) 
for d in values[s] 

是发电机表达,将递归调用search对于每个可能的值,该值是有效的values[s]。它会给我们一堆结果 - 每个d in values[s]。每个结果都可以是字典(yay成功)或False(boo,失败)。

some所做的只是选择组中的第一个成功案例 - 否则返回False

一个逻辑上等同的方法是:

for d in values[s]: 
    e = search(assign(values.copy(), s, d)) 
    if e: return e 
return False