🔄 Как заполнить матрицу по спирали с помощью Python: пошаговое руководство
Чтобы заполнить матрицу по спирали в Python, вы можете использовать следующий код:
def заполнить_матрицу_по_спирали(n):
матрица = [[0] * n for _ in range(n)]
число = 1
верхняя_граница = 0
нижняя_граница = n - 1
левая_граница = 0
правая_граница = n - 1
while число <= n * n:
for i in range(левая_граница, правая_граница + 1):
матрица[верхняя_граница][i] = число
число += 1
верхняя_граница += 1
for i in range(верхняя_граница, нижняя_граница + 1):
матрица[i][правая_граница] = число
число += 1
правая_граница -= 1
for i in range(правая_граница, левая_граница - 1, -1):
матрица[нижняя_граница][i] = число
число += 1
нижняя_граница -= 1
for i in range(нижняя_граница, верхняя_граница - 1, -1):
матрица[i][левая_граница] = число
число += 1
левая_граница += 1
return матрица
размер_матрицы = int(input("Введите размер матрицы: "))
спиральная_матрица = заполнить_матрицу_по_спирали(размер_матрицы)
print(спиральная_матрица)
Этот код создает функцию заполнить_матрицу_по_спирали, которая принимает размер матрицы n и возвращает заполненную по спирали матрицу. Затем код запрашивает у пользователя размер матрицы и вызывает функцию заполнить_матрицу_по_спирали, чтобы заполнить матрицу по спирали. Результат выводится на экран.
Детальный ответ
Как заполнить матрицу по спирали в Python
Заполнение матрицы по спирали в Python - это процесс, в котором элементы матрицы записываются по спирали, начиная с внешнего края и двигаясь внутрь.
Шаги для заполнения матрицы по спирали:
1. Задайте начальные значения для переменных: верхняя граница top, нижняя граница bottom, левая граница left, правая граница right и переменную direction. Начните с направления вправо (значение 0).
top = 0
bottom = n - 1
left = 0
right = n - 1
direction = 0
2. Используйте цикл while для заполнения элементов матрицы. Проверьте условие, что верхняя граница не превышает нижнюю границу и левая граница не превышает правую границу. Это гарантирует заполнение элементов только внутри границ.
while top <= bottom and left <= right:
# Заполнение элементов при движении вправо
if direction == 0:
for i in range(left, right + 1):
matrix[top][i] = value
value += 1
top += 1
# Заполнение элементов при движении вниз
elif direction == 1:
for i in range(top, bottom + 1):
matrix[i][right] = value
value += 1
right -= 1
# Заполнение элементов при движении влево
elif direction == 2:
for i in range(right, left - 1, -1):
matrix[bottom][i] = value
value += 1
bottom -= 1
# Заполнение элементов при движении вверх
else:
for i in range(bottom, top - 1, -1):
matrix[i][left] = value
value += 1
left += 1
direction = (direction + 1) % 4
3. В каждой итерации цикла while выполните заполнение элементов в соответствии с текущим направлением движения. При этом обновляйте соответствующие границы и изменяйте направление движения.
4. Если вы хотите, чтобы матрица имела размеры, отличные от квадратной, замените переменную n в вышеуказанном коде на соответствующие значения для количества строк и столбцов.
Пример
def fill_spiral_matrix(n):
matrix = [[0] * n for _ in range(n)]
top = 0
bottom = n - 1
left = 0
right = n - 1
direction = 0
value = 1
while top <= bottom and left <= right:
if direction == 0:
for i in range(left, right + 1):
matrix[top][i] = value
value += 1
top += 1
elif direction == 1:
for i in range(top, bottom + 1):
matrix[i][right] = value
value += 1
right -= 1
elif direction == 2:
for i in range(right, left - 1, -1):
matrix[bottom][i] = value
value += 1
bottom -= 1
else:
for i in range(bottom, top - 1, -1):
matrix[i][left] = value
value += 1
left += 1
direction = (direction + 1) % 4
return matrix
n = int(input("Введите размер матрицы: "))
spiral_matrix = fill_spiral_matrix(n)
for row in spiral_matrix:
for element in row:
print(element, end=" ")
print()