for循环作为python中函数的输入参数

时间:2015-02-06 03:37:33

标签: python sudoku

我试图了解从this网站解决Python中的Sudoku问题。我无法理解“搜索”功能,尤其是“搜索”中“某些”功能的应用。

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中,我们尝试找到一个正方形(正方形是数独中一个数字的占位符),其中可填充的值最少。然后,为每个值调用assign函数。 assign的输出可以是false,也可以是新词典values。我想知道“某些”功能的目的是什么?

1 个答案:

答案 0 :(得分:2)

这部分:

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

是一个生成器表达式,它将针对search有效的每个可能值递归调用values[s]。它会给我们一堆结果 - 每个d in values[s]一个。每个结果将是字典(yay success)或False(boo,failure)。

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

逻辑等效的方法是:

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