Adloun

NSI (première) · Chapitre 11 · Application directe du cours

Voici une fonction et sa documentation

Conduire un projet · Spécifier et documenter · niveau 1 (application)

Énoncé

Voici une fonction et sa documentation.


def prochain_joueur(g):
    """Renvoie le joueur qui doit jouer. Marche a tous les coups."""
    return "X" if sum(l.count(".") for l in g) % 2 == 1 else "O"

La docstring est malhonnête sur deux points. Lesquels ? La récrire.

Corrigé

Les deux défauts.

  • Elle ne dit pas ce qu'elle exige. La fonction suppose que g est une grille dont les cases valent "X", "O" ou ".", et que X a commencé. Aucune de ces trois hypothèses n'est écrite ; sur une grille où O a commencé, la réponse est fausse sans que rien ne le signale.
  • « Marche à tous les coups » ne veut rien dire. Une docstring ne promet pas, elle décrit : ce qu'il faut lui donner, ce qu'elle rend, ce qu'elle ne garantit pas. Une phrase rassurante à la place d'une précondition est pire que rien, puisqu'elle dissuade de vérifier.

La version honnête.


def prochain_joueur(g):
    """Renvoie "X" ou "O", le joueur dont c'est le tour.

    Precondition : g est une grille 3x3 de "X", "O" et "." ; la
    partie a commence par X ; les coups ont alterne.
    Ne verifie pas que la partie est encore en cours : sur une
    grille deja gagnee, renvoie tout de meme un joueur.
    """
    assert len(g) == 3 and all(len(ligne) == 3 for ligne in g)
    return "X" if sum(l.count(".") for l in g) % 2 == 1 else "O"

La dernière phrase est celle qui coûte le plus à écrire, et c'est la plus utile : elle énonce ce que la fonction ne fait pas. C'est la même exigence que « dire les limites » à l'oral, et que la quatrième ligne de la fiche de spécification — trois formes d'une seule discipline : ne promettez que ce que vous garantissez.

100 % gratuit

Essaie le suivant avec le tuteur

Faire l'exercice suivant avec le tuteur

Sans compte : le cours, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant avec le tuteur →