2017-11-26 19 views
0

Hey, ich bin neu zu Python wollte nur wissen, und ich mache das richtig, bevor ich es einreiche?Überprüfen, ob Matrix quadratisch ist

inverse = [] 
matrix = [[1, 2] , [3, 4]] 
if len (matrix) != len(matrix [0]): 
raised (‘The matrix must be square’) 

Antwort

2

Sie benötigen einen Fehlertyp zu erhöhen und Ihre Logik ändern zu bestimmen, ob die Matrix quadratisch ist:

inverse = [] 
matrix = [[1, 2], [3, 4]] 
if len(matrix) != len(matrix[0]) and len(set(map(len, matrix))) != 1: 
    raise AttributeError('The matrix must be square') #or error of your choice 

Wenn Sie jedoch einen benutzerdefinierten Fehler erzeugen möchten, können Sie von Exception erben und __str__ außer Kraft setzen:

class MatrixLenError(Exception): 
    pass 

matrix = [[1, 2], [3, 4]] 
if len(matrix) != len(matrix[0]) and len(set(map(len, matrix))) != 1: 
    raise MatrixLenError('The matrix must be square') 
+0

'Klasse MatrixLenError (Exception): pass; Raise MatrixLenError ("Die Matrix muss quadratisch sein") 'sollte auch funktionieren - keine Notwendigkeit," __str__ "in späteren Versionen zu überschreiben. –

+0

Es ist ein netter Vorschlag, aber ich denke OP fragt nach der spezifischen Logik in Bezug auf die Prüfung, ob eine Matrix quadriert wird –

+0

Außerdem müssten Sie die Länge jeder Zeile vergleichen, nicht nur die erste. –

2

Obwohl Ihr Code funktioniert, wird es nicht für eine Matrix, wie [[1,2], [1,2,3]].

Zunächst einmal diese Logik in einer Methode kapseln:

def is_squared(matrix): 
    # Check that all rows have the correct length, not just the first one 
    return all(len(row) == len(matrix) for row in matrix) 

Dann können Sie einfach:

inverse = [] 
matrix = [[1,2], [3,4]] 
if not is_squared(matrix): 
    raise AttributeError("The matrix must be squared") 
+0

Vielen Dank für Ihre Hilfe – Dcollins