Помогите решить задачу на языка python
Напиши код на языке python. Размерности двумерных массивов следует запрашивать у пользователя. Все необходимые данные должны передаваться в функции в качестве параметров. Все переменные, используемые только внутри функции, должны быть описаны как локальные. Использование глобальных переменных в функциях не допускается. Обеспечить вывод, как исходного массива, так и массива, полученного в результате работы программы, там, где это возможно по условию задачи. Пункты задания оформить в виде функций Осуществить циклический сдвиг элементов матрицы размером m * n (m строк x n столбцов). Сдвиг выполнить вправо на k элементов таким образом: элементы первой строки сдвигаются в последний столбец сверху вниз, из него - в последнюю строку справа налево, из нее - в первый столбец снизу вверх, из него - в первую строку; для остальных элементов - аналогично.Осуществить циклический сдвиг элементов матрицы размером m * n (m строк x n столбцов). Сдвиг выполнить вправо на k элементов таким образом: элементы первой строки сдвигаются в последний столбец сверху вниз, из него - в последнюю строку справа налево, из нее - в первый столбец снизу вверх, из него - в первую строку; для остальных элементов - аналогично. матрица наполняется рандомными числами. Пример сдвига матрицы на фото:

Сам не понимаю как сделать, chat gpt решает не правильно, решил сюда обратится
Вот мой код, он работает, но нужно по максимуму использовать библиотеку numpy, чего я не умею, эта библиотека должна использоваться в функции rotate_spiral
import random
N = 6
def print_matrix(matrix):
for row in matrix:
for elem in row:
print(f"{elem:6}", end="")
print()
def rotate_spiral(matrix, step):
layers = N // 2
for k in range(layers):
edge = N - 1 - k
cur = []
# Extract the layer
cur.extend(matrix[k][k:edge])
cur.extend([matrix[i][edge] for i in range(k, edge)])
cur.extend(matrix[edge][edge:k:-1])
cur.extend([matrix[i][k] for i in range(edge, k, -1)])
# Rotate the layer
shifted = cur[-step % len(cur):] + cur[:-step % len(cur)]
# Place the rotated layer back
idx = 0
for j in range(k, edge):
matrix[k][j] = shifted[idx]
idx += 1
for i in range(k, edge):
matrix[i][edge] = shifted[idx]
idx += 1
for j in range(edge, k, -1):
matrix[edge][j] = shifted[idx]
idx += 1
for i in range(edge, k, -1):
matrix[i][k] = shifted[idx]
idx += 1
return matrix
if __name__ == "__main__":
spiral = [[random.randint(1, 20) for _ in range(N)] for _ in
range(N)]
print("Original array:")
print_matrix(spiral)
step = int(input("\nHow many steps to turn? Step = "))
result = rotate_spiral(spiral, step)
print("\nResult:")
print_matrix(result)
Ответы (1 шт):
Подробно расписывать решение не буду, но основную идею - покажу. Итак, вам надо использовать numpy - чудесно, работа упрощается раза в четыре. Запросы пользователя, оформление функции и передачу ей параметров, работа с локальными и глобальными переменными - все это оставляю вам на "домашнюю проработку" материала. А вот вам сам код, он очень прост:
n=7
m=9
L=3
arr=np.arange(n*m).reshape((n,m))
print(arr)
i=0
j=0
while ((m-i)>=2 and (n-j)>=2):
a=np.concatenate((arr[j,i:m-1],arr[j:n-1,m-1],arr[n-1,m-1:j:-1],arr[n-1:j:-1,i]))
a=np.roll(a, L)
arr[j,i:m-1]=a[0:m-i-1]
arr[j:n-1,m-1]=a[m-i-1:m-i-1+n-j-1]
arr[n-1,m-1:j:-1]=a[m+n-i-j-2:2*(m-i-1)+n-j-1]
arr[n-1:j:-1,i]=a[2*(m-i-1)+n-j-1:]
m=m-1
i=i+1
n=n-1
j=j+1
print(arr)
Имеем до выполнения "функции":
[ 0 1 2 3 4 5 6 7 8]
[ 9 10 11 12 13 14 15 16 17]
[18 19 20 21 22 23 24 25 26]
[27 28 29 30 31 32 33 34 35]
[36 37 38 39 40 41 42 43 44]
[45 46 47 48 49 50 51 52 53]
[54 55 56 57 58 59 60 61 62]]
После выполнения функции:
[[27 18 9 0 1 2 3 4 5]
[36 37 28 19 10 11 12 13 6]
[45 46 39 38 29 20 21 14 7]
[54 47 40 30 31 32 22 15 8]
[55 48 41 42 33 24 23 16 17]
[56 49 50 51 52 43 34 25 26]
[57 58 59 60 61 62 53 44 35]]
В этом примере, все "сферы" матрицы циклически сдвигаются по своим "орбитам". Естественно, если количество строк и/или столбцов нечетно - в середине матрицы остается "островок", который сдвинуть соответственно условию невозможно ( в данном примере - это последовательность "30 31 32".
Будут вопросы - пишите. И совет на бедующее, хорошо запомните - ChatGPT для обучения программированию - это зло! Не хотите сами думать - лучше не мучить себя, не насиловать ChatGPT, не обманывать учителя и не заниматься программированием вообще. Все равно ни результата, ни пользы в обучении не будет. Только время зря потратите.