У меня есть этот код Python, который Питер Норвиг использовал в своем решателе судоку. Я не понимаю, почему assign должен вообще что-то делать с «значениями», потому что нигде в коде «значения» не обновляются, а «значения» используются только в условном операторе 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
eliminate
? Что делаетreplace
? - person Scott Hunter   schedule 19.07.2017print
, позволила бы точно отследить, где и как обновляетсяvalues
. Обратитесь за помощью к этому прекрасному блогу debug. - person Prune   schedule 19.07.2017