Нужна помощь в работе в Python - PullRequest
0 голосов
/ 20 января 2020

Я рассматриваю приведенный ниже код и не могу понять, почему digit = values[squares] находится в функции def eliminate(values). Может кто-нибудь объяснить, почему это сделано?

Спасибо

def cross(A,B):
    return [a+b for a in A for b in B]

digits = '123456789'
rows = 'ABCDEFGHI'
cols = digits
squares = cross(rows,cols)
unitlist = ([cross(rows,c)for c in cols]+[cross(r,cols)for r in rows]+
         [cross(rows,cols)for rows in('ABC','DEF','GHI')for cols in('123','456','789')])
units = dict((s,[u for u in unitlist if s in u])for s in squares)
peers = dict((s, set(sum(units[s],[]))-set([s])) for s in squares)
grid = '..3.2.6..9..3.5..1..18.64....81.29..7.......8..67.82....26.95..8..2.3..9..5.1.3..'

def grid_values(grid):
    values =[]
    for c in grid:
        if c == '.':
            values.append(digits)
        elif c in digits:
            values.append(c)
    assert len(grid)==81
    return dict(zip(squares,grid))

def eliminate(values):
    solved_values =[squares for squares in values.keys() if len(values[squares])==1]
    for squares in solved_values:
        digit = values[squares]
    for peer in peers[squares]:
        values[peer]=values[peer].replace(digit,'')
    return values

1 Ответ

0 голосов
/ 20 января 2020

Код в вашем примере:

for squares in solved_values:
    digit = values[squares]

можно упростить до:

digit = values[squares[-1]]

digit, который будет использоваться позже в этой функции, поэтому он кажется важным, но это l oop не обязательно должно быть al oop, как вы, похоже, поняли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...