for循环作为python中函数的输入参数
For loop as an input parameter of a function in python
我正在尝试从 this 网站了解解决 Python 中的数独问题。我无法理解 "Search" 函数,特别是 "some" 函数在 "search".
中的应用
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
。我想知道这里 "some" 函数的目的是什么?
这部分:
search(assign(values.copy(), s, d))
for d in values[s]
是一个生成器表达式,它将针对每个对 values[s]
有效的可能值递归调用 search
。它会给我们一堆结果——每个 d in values[s]
。每个结果要么是字典(yay success),要么是 False
(boo,failure)。
some
所做的只是选择组中的第一个成功案例 - 否则 return False
。
逻辑上等效的方法是:
for d in values[s]:
e = search(assign(values.copy(), s, d))
if e: return e
return False
我正在尝试从 this 网站了解解决 Python 中的数独问题。我无法理解 "Search" 函数,特别是 "some" 函数在 "search".
中的应用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
。我想知道这里 "some" 函数的目的是什么?
这部分:
search(assign(values.copy(), s, d))
for d in values[s]
是一个生成器表达式,它将针对每个对 values[s]
有效的可能值递归调用 search
。它会给我们一堆结果——每个 d in values[s]
。每个结果要么是字典(yay success),要么是 False
(boo,failure)。
some
所做的只是选择组中的第一个成功案例 - 否则 return False
。
逻辑上等效的方法是:
for d in values[s]:
e = search(assign(values.copy(), s, d))
if e: return e
return False