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

标签 python sudoku

我试图理解用 Python 解决数独问题 this网站。我无法理解“搜索”功能,特别是“某些”功能在“搜索”中的应用。

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

valuessearch 的输入,它是一个字典(键:每个方 block 的名称,值:该方 block 的可能值的字符串)。在搜索中,我们尝试找到一个方 block (方 block 是数独中一个数字的占位符),该方 block 具有最少的可能值来填充。然后,为每个值调用分配函数。 assign 的输出可以是 false 也可以是新的字典 values。我想知道这里“某些”功能的目的是什么?

最佳答案

这部分:

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

是一个生成器表达式,它将递归调用 search 来查找对 values[s] 有效的每个可能值。它会给我们一堆结果——values[s]中的每个d一个结果。每个结果要么是一个字典(成功),要么是 False(失败)。

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

逻辑上等效的方法是:

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

关于python - for循环作为python中函数的输入参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28358173/

相关文章:

artificial-intelligence - 多数独AI方法

java - 尝试在 Java Swing 中构建数独板。 NullPointerException 错误?

java - 管理java中参数传递的引用

python - 显示从文件中读取的 unicode

python - Siamese Network 上的损失不会减少

python - 为什么Python中的future_statements需要放在一切之前?

python - 点击后抓取 .aspx 网站

python - 如何在OpenCV中检测数独网格板

prolog - 元组的 alldifferent

python - Scrapy - 如何抓取网站并将数据存储在 Microsoft SQL Server 数据库中?