Я относительно новичок в программировании с Python. Этот код работал отлично, пока я не попытался превратить его в класс. Я делаю класс для своего кода решателя судоку, чтобы практиковать классы и увлекаться объектно-ориентированным программированием.
Итак, я прочитал целую кучу вопросов от пользователей, у которых возникла аналогичная проблема, большинство ответов были: -создать сначала класс перед вызовом функции из указанного класса, но ни один из них, похоже, не работает для моей спецификации c пример.
Вот мой класс:
#assume sudoku is imported as a np.array, white spaces replaced by zeros
class Sudoku():
solution_number = 1
def __init__ (self, sud_arr):
self.sudo = sud_arr
#print(self.sudo)
def possible (self, y, x, num):
for i in range(9):
if self.sudo[y][i] == num:
return False
if self.sudo[i][x] == num:
return False
yy = (y//3)*3
xx = (x//3)*3
for i in range(3):
for j in range(3):
if self.sudo[yy+i][xx+j] == num:
return False
return True
def solve(self):
for i in range(9):
for j in range(9):
if self.sudo[i][j] == 0:
for nr in range(1,10):
if Sudoku.possible(i,j,nr): #line 34
self.sudo[i][j] = nr
Sudoku.solve()
self.sudo[i][j] = 0
return
if Sudoku.solution_number > 1: #if there is more than one solution, include solution number
print("Solution Number {}".format(Sudoku.solution_number))
else: print("Solution Number 1")
print(self.sudo)
Sudoku.add_sol_num()
@classmethod
def add_sol_num(cls):
cls.solution_number += 1
После запуска:
s = Sudoku(su) #where su is a numpy array sudoku
s.solve() #line 52
Я получаю сообщение об ошибке:
File "/Users/georgesvanheerden/Python/Projects/Sudoku/SudokuSolver.py", line 52, in <module>
s.solve()
File "/Users/georgesvanheerden/Python/Projects/Sudoku/SudokuSolver.py", line 34, in solve
if Sudoku.possible(i,j,nr):
TypeError: possible() missing 1 required positional argument: 'num'
[Finished in 1.9s with exit code 1]
Извините если это слишком много кода, я не знал, какие части вырезать.