私は数独を続けますが、私はあなたの助けが必要です。ここでブロックされています:数独Pythonで各行/列/領域を確認する方法
def grid_index(grid, value):
for i, row in enumerate(grid):
for j, cell in enumerate(row):
if cell == value:
return i, j
return -1, -1
def can_fill_cell(sudoku, coords):
row = sudoku[0]
for cell in row:
if cell == value_to_input:
return False
column = [row[0] for row in sudoku]
for cell in column:
if cell == value_to_input:
return False
square = [sudoku[x][y] for x in range(3) for y in range(3)]
for cell in square:
if cell == value_to_input:
return False
return True
def solve_next_unsolved(sudoku):
"""
for x in range(9):
for y in range(9):
coords = x,y
"""
coords = (2,2)
if can_fill_cell(sudoku, coords):
sudoku[coords[0]][coords[1]] = value_to_input
print(sudoku)
したがって、grid_indexでは、すべてのセル座標が取得されます。私can_fill_cell機能で
は、私は言った:
私が今持っている問題を「値は休憩とFalseと入力しない値を返す機能を出て、入力する値に等しい場合」 、それは私がすべての行、列、地域を確認する方法を知らないです...
あなたはどうか考えてください?
Thxを、 Ravaniss
EDIT:ただ情報のために、私はこのように私の数独を取得:
value_to_input = "1"
def import_sudoku():
with open("sudoku.txt") as f:
lines = f.read()
sudoku = [[character for character in line if not character == " "] for line in lines.split("\n")]
return sudoku
sudoku = import_sudoku()
print(sudoku)
Siの、今私は確認することができます。印刷ではありません
.2.
.2.
...
を結果は偽ですが、私はこれを行うことができます:
...
1..
...
.2.
22.
...
例えば、
。私は確認する必要があります。どのように私はこのすべてを確認し、私のsudokuの仕事をすることができますか?
あなたの助けにはThx!
を好きならあなたはジップでリテラルに対してそれを検証することができますが、重複
をチェックすることによって、単に実装するのが最も簡単です* sudoku): verify(col) どうすれば分かりやすいでしょうか? 私はこれが何であるか知っているitertools.productを探しています。私はそれが何を理解し、理解せずに貼り付けをコピーしたくない。 – Ravaniss
@Ravanissこれは非常に慣用的なPythonです。他に何を探しているのか分かりません。 –
関数zip()をもっと理解しやすいように変更したいと思います。 zip()、map()と他の関数(名前を持たない)は、使用するのが本当にクールではありません。理解のために – Ravaniss