2017-07-19 44 views
-8

我对他的数独解算器使用的彼得·诺维格这个Python代码。我不明白为什么assign应该为'values'做任何事情,因为在代码中'values'没有被更新,'values'只在if条件语句中被使用。你能解释一下,先谢谢了!你能解释Norvig的Sudoku代码中的赋值功能吗?

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 
+0

正是你难道不明白是什么? – DeepSpace

+0

'消除'是做什么的? “替换”是做什么的? –

+1

调用函数后为什么值应该不同? – PythonRCpp

回答

0

values被更新为的eliminate副作用:

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

这从valuess条目删除所有值d。见replace

+0

也谢谢供将来参考:https://stackoverflow.com /问题/ 44738949 /递归的帮助 - 彼得 - norvigs-数独运动询问同样的事情,答案也不错那里(应该张贴我的问题之前已经检查)。 – PythonRCpp

相关问题