Python :: Aufgabe #44

3 Lösungen Lösungen öffentlich

Matrizen um 90 Grad drehen

Anfänger - Python von pocki - 11.11.2013 um 16:38 Uhr
Erstelle ein Programm, welches als Eingabe eine Matrix beliebiger Größe entgegennimmt und diese dann um 90 Grad dreht.

Beispiel an einer 4x4 Matrix:
Eingabematrix mit den Elementen:
a11 a12 a13 a14
a21 a22 a23 a24
a31 a32 a33 a34
a41 a42 a43 a44

sollte diese Ausgabematrix erzeugen:
a41 a31 a21 a11
a42 a32 a22 a12
a43 a33 a23 a13
a44 a34 a24 a14

Das Programm sollte für unterschiedlich großen und auch mit nicht quadratischen Matrizen funktionieren.

Lösungen:

vote_ok
von malthea (180 Punkte) - 04.03.2014 um 19:08 Uhr
Quellcode ausblenden Python-Code
""" matrizen_sort - Python 3.3.4
     dreht beliebige Matritzen um 90 Grad im Uhrzeigersinn """

def ausgabe(a, b, c, d):
    """ gibt eine Matrix mit a Spalten und b Zeilen aus """
    i, j = 0, 0
    for j in range (b):
        for i in range (a):
            print (d[c], end = ' ')
            c +=1
        print ('\n')

def eingabe (a, i, j):
    """ Eingabe von beliebigen Matrixelementen (a == True) und
    Integerwerten (a==False) fuer Zeilen- bzw Spaltenanzahl
    """
    b = 0
    if a == True:
        print ('Element [', j, i, end = ' ')
        b = input (']:')
    while a == False:
        try:
            b = int(input(':'))
            a = True
            if b < 0:
                a =False
                print ('Bitte eine positive Zahl eingeben', end = ' ')
        except ValueError:
            print ('Bitte eine Integerzahl eingeben', end = ' ')
            a = False
    return b

print ('Anzahl Spalten', end = ' ')
a = eingabe (False, 0, 0)
print ('Anzahl Zeilen', end = ' ')
b = eingabe (False, 0, 0)
 
liste1 = list ()   
i, j, k, l = 0, 0, 0, 0

liste2 = [' ']

for j in range (b):
    for i in range (a):
        liste1.append (eingabe (True, i, j))
                                           

while l <= (a*b):
    for j in range (a):
        for i in range (b):
            k = a*(b-i) - a + j
            liste2.append (liste1[k])
            l += 1
        

print ('ursprüngliche Matrix: \n')
ausgabe(a, b, 0, liste1)

print ('um 90 Grad gedrehte Matrix: \n')
ausgabe(b, a, 1, liste2)
vote_ok
von ZRX88 (2030 Punkte) - 30.12.2016 um 14:19 Uhr
Funktioniert nur für quadratische matrizen.

Quellcode ausblenden Python-Code
""" matrix class -> rotate matrix """

class matrix():
    
    dim = 9
    matrix = []
    
    def init(self):
        pass
    
    def initialize_matrix(self):
        for i in range(self.dim):
            row = []
            for j in range(self.dim):
                row.append('a_%d%d'  % (i+1,j+1))
            self.matrix.append(row)

    def pritty_print(self):
        for zeile in range(self.dim):
            print(','.join(self.matrix[zeile]))
            
    def rotate(self):
        new_matrix = []
        for spalte in range(self.dim):
            row = []
            for zeile in range(self.dim -1,-1,-1):
                row.append(self.matrix[zeile][spalte])
            new_matrix.append(row)
        self.matrix = new_matrix

matrix = matrix()
matrix.initialize_matrix()

for iterations in range(9):
    print('matrix after %d iterations:' %iterations)
    matrix.pritty_print()
    matrix.rotate()
vote_ok
von maellj (190 Punkte) - 30.09.2017 um 11:51 Uhr
Quellcode ausblenden Python-Code
# i-te Zeile der Eingabe wird (n-i)-te Spalte der Ausgabe, mit n...Anzahl Zeilen Eingabe
def drehung(A):
    rows = len(A)
    columns = len(A[0])
    gedreht = [[0 for col in range(rows)] for row in range(columns)]
    for i in range(rows):
        for j in range(columns):
            gedreht[j][rows - i - 1] = A[i][j]
    return gedreht