你能解释一下诺维格数独代码中的赋值函数吗?

2024-09-29 01:28:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有彼得诺维格在他的数独解算器中使用的Python代码。我不明白assign为什么要对values做任何事情,因为代码中没有任何地方更新values,而values只在if条件语句中使用。请你解释一下,谢谢!你知道吗

def assign(values, s, d):
    """Eliminate all the other values (except d) from values[s] and 
propagate.
     Return values, except return False if a contradiction is 
detected."""
    other_values = values[s].replace(d, '')
    if all(eliminate(values, s, d2) for d2 in other_values):
        return values
    else:
        return False


 def eliminate(values,s,d):
    '''Eliminate d from values[s]; propagate when values or places <=2.
Return values, except return False if a contradiction is detected.'''
    if d not in values[s]:
        return values ## Already eliminated
    values[s] = values[s].replace(d,'')

    if len(values[s]) == 0:
        return False ##Contradiction: removed last value
    elif len(values[s]) == 1:
        d2 = values[s]
        if not all(eliminate(values, s2, d2) for s2 in peers[s]):
            return False

    for u in units[s]:
        dplaces = [s for s in u if d in values[s]]
        if len(dplaces) == 0:
            return False ## Contradiction: no
        elif len(dplaces) == 1:
            # d can only be in one place in unit; assign it there
            if not assign(values,dplaces[0],d):
                return False
    return values

Tags: infalseforlenreturnifnotall
1条回答
网友
1楼 · 发布于 2024-09-29 01:28:56

values更新为eliminate的副作用:

values[s] = values[s].replace(d,'')

这将从valuess条目中删除所有值d。见replace。你知道吗

相关问题 更多 >