In [1]:
A = [ [2, 7, 6],
      [9, 5, 1],
      [4, 3, 8]
    ]
In [2]:
B = [ [4, 14, 15, 1],
      [9, 7, 6, 12],
      [5, 11, 10, 8],
      [16, 2, 3, 13]
    ]
In [3]:
C  = [ [4, 14, 15, 1],
      [9, 7, 6, 12],
      [5, 11, 10, 8],
      [0, 0, 0, 0]
    ]
In [4]:
def sommeLigne(matrice, numero_ligne):
    """
    matrice -- matrice carrée d'entiers
    numero_ligne -- entier
    
    renvoie la somme des entiers de la ligne numero_ligne de matrice
    """   
    somme = 0
    ligne = matrice[numero_ligne]
    for valeur in ligne:
        somme += valeur
    return somme

def sommeColonne(matrice, numero_colonne):
    """
    matrice -- matrice carrée d'entiers
    numero_colonne -- entier
    
    renvoie la somme des entiers de la colonne numero_colonne de matrice
    """   
    somme = 0
    colonne = [ matrice[i][numero_colonne] for i in range(0,len(matrice))]
    for valeur in colonne:
        somme += valeur
    return somme

def sommeDiagonale_NO_SE(matrice):
    """
    matrice -- matrice carrée d'entiers
    
    renvoie la somme des entiers de la diagonale \
    """   
    somme = 0
    diagonale = [matrice[i][i] for i in range(0,len(matrice))]
    for valeur in diagonale:
        somme += valeur
    return somme


def sommeDiagonale_SO_NE(matrice):
    """
    matrice -- matrice carrée d'entiers
    
    renvoie la somme des entiers de la diagonale /
    """   
    somme = 0
    n = len(matrice)
    diagonale = [matrice[i][n-1-i] for i in range(0,n)]
    for valeur in diagonale:
        somme += valeur
    return somme

def est_magique(matrice):
    """
    matrice -- matrice carrée d'entiers
    
    renvoie True si matrice est un carré magique, False sinon.
    """
    n = len(matrice) # nombre de lignes de matrice
    constante_magique = sommeLigne(matrice, 0)
    for k in range(1, n):
        if sommeLigne(matrice, k) != constante_magique: return False
    for k in range(0, n):
        if sommeColonne(matrice, k) != constante_magique: return False
    if sommeDiagonale_NO_SE(matrice) != constante_magique: return False
    if sommeDiagonale_SO_NE(matrice) != constante_magique: return False
    return True
    
    
In [5]:
est_magique(A)
Out[5]:
True
In [6]:
est_magique(B)
Out[6]:
True
In [7]:
est_magique(C)
Out[7]:
False
In [ ]: