Peter Norvig有一篇文章描述了一个program to solve sudoku puzzles,通过组合确定性逻辑操作和智能遍历可能的解决方案,即使是最困难的解决方案。后者是递归完成的;下面是该函数(source):
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
_,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]
)
(为了保护我的眼睛,我添加了一些空格、CRs和制表符;向Norvig博士道歉。)
在评论的正下方有一行以"_,s
“开头。这似乎是s
值最小的未打包元组(len(values[s]),s
)。Norvig博士使用"_
“作为变量名仅仅是为了表明这是一个”无关“的结果,还是发生了其他事情?有没有推荐使用"_
“作为变量名的情况?在交互模式下,"_
“保存上一次操作的答案;在非交互代码中是否有类似的函数?
更新
谢谢你的好答案。我猜答案是Alex Martelli的“增值”;他指出,"_,vbl_of_interest“成语通常是DSU成语的副作用,而这种成语本身在很大程度上是不必要的。
https://stackoverflow.com/questions/1739514
复制相似问题