Adloun

Le cours donne le fichier tests grille.py, écrit avant grille.py

Exercice d'entraînement · niveau 2 · NSI (première), chapitre 11 — Conduire un projet · Du sujet au code

Énoncé

Le cours donne le fichier tests_grille.py, écrit avant grille.py. Écrire maintenant grille.py pour qu'il passe ces trois tests. Chaque ligne du code doit être justifiée par un test précis.

Corrigé


# grille.py
def creer(n, p):
    """Grille n x p remplie de 0. Precondition : n > 0 et p > 0."""
    assert n > 0 and p > 0, "dimensions invalides"
    return [[0] * p for _ in range(n)]

def lire(g, i, j):
    """Contenu de la case (i, j)."""
    assert 0 <= i < len(g) and 0 <= j < len(g[0]), "case hors grille"
    return g[i][j]

def ecrire(g, i, j, v):
    """Range v dans la case (i, j). Ne renvoie rien."""
    assert 0 <= i < len(g) and 0 <= j < len(g[0]), "case hors grille"
    g[i][j] = v

Chaque ligne est exigée par un test.

TestCe qu'il impose
`test_creation``creer` rend lignes de colonnes, toutes à ---

donc la compréhension de liste, et le remplissage</td></tr><tr style=""><td style="text-align:left;padding:8px 12px;color:#34332D;vertical-align:top">test_ecriture_independante</td><td style="text-align:left;padding:8px 12px;color:#34332D;vertical-align:top"><strong>la compréhension</strong> for _ in range(n) et non [[0] <em> p] </em> n</td></tr><tr style="border-bottom:1.5px solid #2E2C26"><td style="text-align:left;padding:8px 12px;color:#34332D;vertical-align:top">test_hors_grille</td><td style="text-align:left;padding:8px 12px;color:#34332D;vertical-align:top">les assert de ecrire : sans eux, l'écriture hors grille ne lève pas AssertionError</td></tr></table></div>

Contrôle : les trois tests du cours passent et impriment ok test_creation, ok test_ecriture_independante, ok test_hors_grille.

Un détail qui n'en est pas un : ecrire ne renvoie rien, elle modifie la grille reçue. C'est possible parce qu'une liste est mutable, et c'est ce que le prototype annonçait par -&gt; None. Une version qui renverrait une nouvelle grille serait défendable aussi — mais alors test_ecriture_independante tel qu'il est écrit échouerait, puisqu'il relit g après l'appel. Les tests ne vérifient pas seulement les valeurs : ils gèlent l'interface.

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.