Pranav Sharma Ответов: 2

Мне нужна помощь в логике кода чтобы повернуть матрицу на 90 градусов по часовой стрелке


Напишите функцию rotate(m), которая принимает в качестве входных данных представление списка m квадратной матрицы и возвращает матрицу, полученную поворотом исходной матрицы clockwize на 90 градусов. Например, если мы повернем матрицу выше, то получим

матрица равна n*n

>>> поворот([[1,2,3],[4,5,6],[7,8,9]])
[[7, 4, 1], [8, 5, 2], [9, 6, 3]]

>>> поворот([[1,1,1],[2,2,2],[3,3,3]])
[[3, 2, 1], [3, 2, 1], [3, 2, 1]]

Что я уже пробовал:

def rotate(m):
    l1=m[::]
    n=len(m)-1 
    count=n
    for i in range(n+1):
        for j in range(n+1):
            l1[j][count]=l1[i][j]
        count-=1
    return l1

Pranav Sharma

все циклы имеют соответствующие отступы, они не отображаются в коде

2 Ответов

Рейтинг:
7

Patrice T

Ваш код заменяет элементы матрицы на себя:

l1[j][count]=l1[i][j]

это означает, что
123 121 121 121
456 456 452 452
789 789 789 781

Итак, сначала вы убиваете 3, затем вы убиваете 6, и вы убиваете 9 с 1, который был 3 в начале.
Попробуйте что-нибудь вроде
l1[j][count]=m[i][j]

по крайней мере, это не убьет некоторые элементы.


Рейтинг:
15

OriginalGriff

Так... представьте, что вы-матрица. Как вы думаете, что происходит с вами, когда вы запускаете этот код на себе?

Давайте сделаем это проще: вы-одномерный массив, и вы хотите обратить себя вспять:

1, 2, 3, 4

Когда вы это сделаете:
for i in range(4)
   me[3-i] = me[i]
Что ты получаешь?
это
4, 3, 2, 1
Или
1, 2, 2, 1

Чтобы перевернуть массив, разве вам не нужно поменять местами элементы?
for i in range(4)
   temp = me[3-i]
   me[3-i] = me[i]
   me[i] = temp


Richard Deeming

За исключением того, что ваш окончательный код перевернет массив дважды, оставляя вас с исходным массивом.

Или был не предназначена для использования в качестве "упражнение для читателя"? :)

OriginalGriff

Ты должен оставить им хоть какое-то занятие! :смеяться: