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 (2770 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 0 (0 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
1813726

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.