Python здесь новичок
Пишу скрипт для решения судоку. Большая часть кода взята из этого видео.
Функция работает и печатает решенную сетку, пока мой оператор печати находится в функции, но когда я помещаю его за пределы функции, он распечатывает исходный массив и не решенный массив.
Любая идея, почему это происходит и как я могу получить доступ к решенному массиву вне функции в теле кода.
Вы все можете игнорировать тестирование функций, потому что они работают, поскольку решенный массив распечатывается из функции, моя проблема в том, как его распечатать и получить к нему доступ из тела.
Я бы хотел, чтобы операторы печати 3 или 4 были решенным массивом.
Любая помощь приветствуется.
import numpy as np
sudoku_grid = np.array([[4, 0, 0, 0, 0, 1, 6, 3, 7],
[0, 6, 0, 0, 4, 0, 0, 5, 1],
[0, 0, 0, 6, 3, 0, 0, 0, 0],
[0, 2, 0, 0, 0, 8, 1, 0, 0],
[6, 0, 8, 9, 0, 5, 3, 0, 4],
[0, 0, 1, 4, 0, 0, 0, 8, 0],
[0, 0, 0, 0, 9, 3, 0, 0, 0],
[7, 8, 0, 0, 6, 0, 0, 1, 0],
[2, 3, 6, 1, 0, 0, 0, 0, 8]])
def possible(row, column, number, grid):
"""Checks whether a number can be inserted in a cell"""
# Checking for duplicate number in row
for i in range(9):
if number == grid[row, i]:
return False
# Checking for duplicate number in column
for j in range(9):
if number == grid[j, column]:
return False
# Checking for duplicate number in grid
# Returns 0,1,2 for row and column so basically 9X9 grid is reduced to 3X3 grid
and duplicated are checked within the same
r = row//3*3
c = column//3*3
for k in range(r, r+3):
for l in range(c, c+3):
if number == grid[k, l]:
return False
return True
def solve(grid):
"""Solves sudoku using recursion and back tracking"""
# use combination of row and column to get a cell
for i in range(9):
for j in range(9):
# if cell is zero then tries to enter number
if grid[i, j] == 0:
for k in range(1, 10):
# Checks if number is possible and enters the same in array
if possible(i, j, k, grid):
grid[i, j] = k
# Recursion moves to next cell
solve(grid)
# Backtracks if not possible
grid[i, j] = 0
# if no numbers are 0 then Solved and return array
return grid
print(grid, "\n Print statement 2(function print statement)")
print(sudoku_grid, "\n Print statement 1(Original grid b/f function)")
print("________________________")
x = solve(sudoku_grid)
print("________________________")
print(x, "\n Print statement 3")
print("________________________")
print(sudoku_grid, "\n Print statement 4")