Можете ли вы объяснить функцию назначения в коде судоку Норвига?

У меня есть этот код 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

person dcw    schedule 19.07.2017    source источник
comment
Что именно ты не понимаешь?   -  person DeepSpace    schedule 19.07.2017
comment
Что делает eliminate? Что делает replace?   -  person Scott Hunter    schedule 19.07.2017
comment
почему значения должны отличаться после вызова функции?   -  person dcw    schedule 19.07.2017
comment
Каков общий код, мы не можем сказать вам об использовании функции, не зная, в каких обстоятельствах она будет использоваться. И в комментариях сообщается, что делает функция.   -  person Professor_Joykill    schedule 19.07.2017
comment
Хорошо, я включил исключенную функцию   -  person dcw    schedule 19.07.2017
comment
Я не понимаю, почему так много отрицательных голосов ... :(, я до сих пор не знаю, каков ответ ...   -  person dcw    schedule 19.07.2017
comment
@PythonCPPMATLAB: Я ожидаю, что вас отвергают из-за отсутствия необходимых исследований. Простая практика отладки, даже пара стратегически размещенных операторов print, позволила бы точно отследить, где и как обновляется values. Обратитесь за помощью к этому прекрасному блогу debug.   -  person Prune    schedule 19.07.2017


Ответы (1)


values обновляется как побочный эффект eliminate:

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

Это удаляет все значения d из записи s в values. См. замену.

person Prune    schedule 19.07.2017
comment
Спасибо! Также для справки в будущем: stackoverflow.com/questions / 44738949 / спрашивает примерно то же самое, и ответ там тоже хороший (надо было проверить, прежде чем отправлять свой вопрос). - person dcw; 20.07.2017