#python #arrays #copy #global
Вопрос:
Я пытаюсь создать начальную копию переменной, которую я хотел бы сравнить в конце с обработанной переменной. Вот что у меня сейчас есть:
def sudoku_solver(sudoku):
global start_sudoku
start_sudoku = copy.deepcopy(sudoku)
solution(sudoku)
......
Я пытаюсь определить это как глобальную переменную, так как у меня есть вторая def function
Я использую для обработки решения, и в конце концов я хотел бы сравнить, совпадают ли два решения или нет:
def self.solution(sudoku):
......
if (len(sudoku) == len(start_sudoku)) == True:
if possible(y, x, n):
......
def self.possible(y, x, n):
однако эти два пункта всегда одинаковы, когда я добираюсь до конца кода. Я проверил, и удостоверения личности разные, однако они всегда заканчиваются одинаково. Как глобальная переменная может оставаться независимой от первой и поддерживать только первое представление информации?
Ответ №1:
Ваша логика предполагает, что вам нужно состояние, для чего и предназначены классы. Использование класса-более чистый подход, чем работа с глобальными переменными.
class SudokuSolver:
def __init__(self, sudoku):
self.start_sudoku = copy.deepcopy(sudoku)
self.solution(sudoku)
...
def solution(self, sudoku):
...
if len(sudoku) == len(self.start_sudoku):
if self.possible(y, x, n):
...
def possible(self, y, x, n):
...
Комментарии:
1. спасибо, это выглядит многообещающе, однако сейчас я изо всех сил пытаюсь вызвать функцию def в классе под названием possible. Как мне это сделать?
2. Я обновил приведенную выше информацию, чтобы представить, с чем я борюсь
3. Я обновил свой ответ. Для доступа к другим методам (или атрибутам) класса вы можете использовать
self.method_name()
. Убедитесь, что метод экземпляра принимаетself
в качестве первого аргумента ссылку на текущий запущенный объект, например, позволяя вам получить доступ к наборуself.start_sudoku
. Видишь docs.python.org/3/library/stdtypes.html#methods