2017-11-26 16 views
0

ちょっと私が知りたいと思っていたPythonには新しく、私はそれを提出する前にこれを正しくしていますか?あなたは、エラーの種類を上げ、行列が正方形であるかどうかを決定するためのロジックを変更する必要が行列が正方形であることを確認してください

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

答えて

2

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 

カスタムエラーを生成したい場合は、あなたがExceptionから継承することができ、 __str__を上書き:

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

'クラスMatrixLenError(例外):合格。 MatrixLenError( "行列は正方形でなければなりません")も引き上げてください - それ以降のバージョンでは '__str__'をオーバーライドする必要はありません。 –

+0

良い提案ですが、OPが行列が2乗されているかどうかのチェックに関連する特定のロジックを求めていると思います –

+0

また、最初の行だけでなく、すべての行の長さを比較する必要があります。 –

2

あなたのコードは動作しますが、そのような[[1,2], [1,2,3]]などのマトリックスのためではないでしょう。

まず、方法でこのロジックをカプセル化:

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) 

次に、あなたができるだけ:

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

ご協力いただきありがとうございます – Dcollins

関連する問題