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
gest 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
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 16 autres exercices corrigés dans ce chapitre, et 20 à chercher avec le tuteur
- Le podcast et la vidéo du chapitre et la correction filmée du TD : 2 minutes sans compte
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.