Adloun

Écrire est carree(m) qui teste si la matrice m a autant de lignes que…

Application directe du cours · niveau 1 (application) · NSI (première), chapitre 4 — Les types construits · Tableaux, indices et matrices

Énoncé

Écrire est_carree(m) qui teste si la matrice m a autant de lignes que de colonnes, en vérifiant d'abord que toutes les lignes ont même longueur.

Corrigé


def est_carree(m):
    """Vrai si m est une matrice carree : lignes de meme longueur, et
    autant de lignes que de colonnes.

    Precondition : m est un tableau de tableaux.
    """
    if len(m) == 0:
        return True             # la matrice vide est 0 x 0
    if not all(len(ligne) == len(m[0]) for ligne in m):
        return False            # pas meme une matrice
    return len(m) == len(m[0])

L'ordre des deux vérifications n'est pas indifférent. Il faut d'abord s'assurer que m est bien une matrice — toutes ses lignes de même longueur — avant de comparer len(m) à len(m[0]). Sans cela, [[1, 2], [3]] serait déclarée carrée, puisqu'elle a deux lignes et que sa première ligne a deux cases. Le nombre de colonnes n'aurait alors aucun sens : il n'y en a pas.

Vérification.


assert est_carree([[1, 2], [3, 4]]) is True
assert est_carree([[1, 2, 3], [4, 5, 6]]) is False     # 2 x 3
assert est_carree([[1, 2], [3]]) is False              # lignes inegales
assert est_carree([[1]]) is True                       # 1 x 1
assert est_carree([]) is True                          # convention 0 x 0

Le cas de la matrice vide est une convention, pas un théorème. On peut décider qu'elle est carrée () ou refuser de répondre par une précondition assert len(m) > 0. Les deux choix se défendent ; ce qui ne se défend pas, c'est de ne pas choisir et de laisser le code décider à notre place. La docstring doit dire lequel des deux on a retenu.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.