функция get_marks_in_box() принимает позицию выбранной ячейки, желаемую степень box_grade (1 для наименьшего размера 3x3, 2 для большего размера 3x3, состоящего из 3x3 и т. д.) и соответствующий блочный словарь. затем он возвращает вложенный цикл 3x3 — отметки — с отметками, полученными из словаря блоков.
Во-вторых, функция box_completed() принимает позицию ячейки, по которой щелкнули, размерность игры (1 для 3x3, 2 для 9x9, 3 для 27x27), желаемую степень блока, отметки из функции get_marks_in_box() и соответствующий словарь блоков. с помощью этой информации он проверяет, заполнен ли этот блок (имеет 3 подряд), и обновляет соответствующий словарь блоков, чтобы его можно было пометить соответствующим образом.
Моя проблема в том, что get_marks_in_box () требует обновления box_dict, что делается в функции box_completed. и моя функция box_completed требует оценок, которые вычисляются в функции get_marks_in_box_function. ниже приведены две функции. Я относительно новичок в программировании, поэтому понимаю, что может быть несколько (потенциально много) неэффективностей и неточностей. как мне следует реорганизовать свой код, чтобы улучшить логику? любая помощь будет принята с благодарностью. заранее спасибо.
Код: Выделить всё
def get_marks_in_box(self, coords, box_deg, box_dict):
N = game dimensions # 1,2, or 3
box_pos = (tl_pos, br_pos)
marks = [[None for _ in range(3)] for _ in range(3)]
for i in range(3):
for j in range(3):
# Calculate the coordinates of the current sub-box
sub_topleft_pos = ((sub_tl_row),(sub_tl_col))
sub_bottomright_pos = ((sub_br_row),(sub_br_col))
# Create a key for this sub-box (degree + its coordinates)
box_key = (sub_tl_pos, sub_br_pos)
# write mark to marks
marks[i][j] = box_dict[box_key]
return marks
Код: Выделить всё
def box_completed(self, coords, N, box_deg, marks, box_dict):
# horizontal
if horizantal 3 in a row:
box_pos = (tl_pos, br_pos)
box_dict[box_pos] = mark
# vertical
if vertical 3 in a row:
box_pos = (tl_pos, br_pos)
box_dict[box_pos] = mark
# diagonal
if diagonal 3 in a row:
box_pos = (tl_pos, br_pos)
box_dict[box_pos] = mark
Подробнее здесь: https://stackoverflow.com/questions/790 ... -functions