40 задач на Python. Джеймс Девис

Чтение книги онлайн.

Читать онлайн книгу 40 задач на Python - Джеймс Девис страница 9

Жанр:
Серия:
Издательство:
40 задач на Python - Джеймс Девис

Скачать книгу

Проверка, что все числа от 1 до n^2 присутствуют

      all_numbers = set(range(1, n*n + 1))

      numbers_in_matrix = set(num for row in matrix for num in row)

      if all_numbers != numbers_in_matrix:

      return False

      # Вычисление эталонной суммы

      magic_sum = sum(matrix[0])

      # Проверка строк

      for row in matrix:

      if sum(row) != magic_sum:

      return False

      # Проверка столбцов

      for col in range(n):

      if sum(matrix[row][col] for row in range(n)) != magic_sum:

      return False

      # Проверка диагоналей

      if sum(matrix[i][i] for i in range(n)) != magic_sum:

      return False

      if sum(matrix[i][n-i-1] for i in range(n)) != magic_sum:

      return False

      return True

      # Чтение данных

      n = int(input())

      matrix = [list(map(int, input().split())) for _ in range(n)]

      # Проверка и вывод результата

      if is_magic_square(matrix):

      print("YES")

      else:

      print("NO")

      ```

      Этот код считывает входные данные, проверяет, является ли матрица магическим квадратом, и выводит соответствующий результат.

      Подробное объяснение кода проверки магического квадрата

      Шаг 1: Считывание размерности матрицы и её элементов

      – Код: `n = int(input())`

      – Здесь используется функция `input()` для чтения входного значения, представляющего размерность матрицы. Функция `int()` преобразует строку в целое число.

      – Код: `matrix = [list(map(int, input().split())) for _ in range(n)]`

      – Этот код считывает ( n ) строк, каждая из которых содержит ( n ) чисел.

      – `input().split()` считывает строку и разбивает её по пробелам, возвращая список строк.

      – `map(int, …)` преобразует каждую строку в целое число.

      – `list(…)` собирает эти числа в список.

      – Внешний цикл `for _ in range(n)` выполняется ( n ) раз, собирая все строки в список списков (матрицу).

      Шаг 2: Проверка уникальности чисел от 1 до ( n^2 )

      – Код: `all_numbers = set(range(1, n*n + 1))`

      – `range(1, n*n + 1)` создает последовательность чисел от 1 до ( n^2 ).

      – `set(…)` преобразует эту последовательность в множество для удобства проверки уникальности.

      – Код: `numbers_in_matrix = set(num for row in matrix for num in row)`

      – Вложенный генератор `num for row in matrix for num in row` проходит по всем элементам матрицы и собирает их в множество `numbers_in_matrix`.

      – Эта строка кода проверяет, что все числа от 1 до ( n^2 ) присутствуют в матрице и являются уникальными.

      – Код: `if all_numbers != numbers_in_matrix: return False`

      – Сравнение множеств `all_numbers` и `numbers_in_matrix`. Если они не равны, то матрица не может быть магическим квадратом, и функция возвращает `False`.

      Шаг 3: Вычисление эталонной суммы

      – Код: `magic_sum = sum(matrix[0])`

      – `sum(matrix[0])` вычисляет сумму чисел в первой строке матрицы.

      – Эта сумма принимается за эталонную, с которой будут сравниваться суммы остальных строк, столбцов и диагоналей.

      Шаг 4: Проверка сумм строк

      – Код: `for row in matrix: if sum(row) != magic_sum: return False`

      – Цикл проходит по каждой строке `row` в матрице.

      – `sum(row)` вычисляет сумму чисел в текущей строке.

      – Если сумма строки не равна `magic_sum`, функция

Скачать книгу