40 задач на Python. Джеймс Девис. Читать онлайн. Newlib. NEWLIB.NET

Автор: Джеймс Девис
Издательство: Автор
Серия:
Жанр произведения:
Год издания: 2024
isbn:
Скачать книгу
= 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`, функция возвращает `False`.

      Шаг 5: Проверка сумм столбцов

      – Код: `for col in range(n): if sum(matrix[row][col] for row in range(n)) != magic_sum: return False`

      – Внешний цикл проходит по каждому столбцу `col`.

      – Внутренний генератор `matrix[row][col] for row in range(n)` собирает все элементы столбца.

      – `sum(…)` вычисляет сумму элементов текущего столбца.

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

      Шаг 6: Проверка сумм диагоналей

      – Главная диагональ:

      – Код:`if sum(matrix[i][i] for i in range(n)) != magic_sum: return False`

      – Генератор `matrix[i][i] for i in range(n)` собирает элементы главной диагонали (где индексы строки и столбца равны).

      – `sum(…)` вычисляет сумму этих элементов.

      – Если сумма главной диагонали не равна `magic_sum`, функция возвращает `False`.

      – Побочная диагональ:

      – Код: `if sum(matrix[i][n-i-1] for i in range(n)) != magic_sum: return False`

      – Генератор `matrix[i][n-i-1] for i in range(n)` собирает элементы побочной диагонали (где сумма индексов строки и столбца равна \( n-1 \)).

      – `sum(…)` вычисляет сумму этих элементов.

      – Если сумма побочной диагонали не равна `magic_sum`, функция возвращает `False`.

      Шаг 7: Вывод результата

      – Код: `if is_magic_square(matrix): print("YES") else: print("NO")`

      – Если функция `is_magic_square(matrix)` возвращает `True`, программа выводит "YES".

      – В противном случае выводится "NO".

      Итог

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

3. Проблемы с делением и умножением

      Описание задачи: Напишите программу, которая будет выполнять деление и умножение двух чисел, но с учетом некоторых специальных случаев.

      Условия:

      1. Если второе число равно нулю, программа должна вывести сообщение "Ошибка: деление на ноль" и завершиться.

      2. Если первое число равно нулю, результатом умножения будет 0, независимо от значения второго числа.

      3. Если второе число больше первого, программа должна вывести результат деления в виде десятичной дроби с двумя знаками после запятой.

      4. В остальных случаях