É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.