La méthode du cours signale que random.randint(1, 6) peut renvoyer 6…
Application directe du cours · niveau 2 · NSI (première), chapitre 3 — Langages et programmation · Spécifier, tester, consulter une documentation
Énoncé
La méthode du cours signale que random.randint(1, 6) peut renvoyer alors que range(1, 6) s'arrête à . Vérifier expérimentalement cette différence de convention, en disant ce que l'expérience prouve et ce qu'elle ne prouve pas.
Corrigé
import random
tirages = [random.randint(1, 6) for _ in range(10000)]
print(min(tirages), max(tirages)) # 1 6
print(sorted(set(tirages))) # [1, 2, 3, 4, 5, 6]
print(list(range(1, 6))) # [1, 2, 3, 4, 5]
print(6 in list(range(1, 6))) # False
Les six faces sortent, compris : randint inclut ses deux bornes. range, lui, exclut la seconde.
Ce que l'expérience prouve. Que peut sortir — un seul tirage à suffisait. Une observation positive suffit à établir une possibilité.
Ce qu'elle ne prouve pas. Que ne sortira jamais. Ne pas l'avoir observé sur tirages est un indice, pas une preuve : c'est encore « le succès d'un jeu de tests ne garantit pas la correction ». Seule la documentation — help(random.randint), qui énonce « Return random integer in range [a, b], including both end points » — l'affirme.
La leçon pratique : deux fonctions voisines, deux conventions opposées, aucune erreur visible en cas de confusion. Un dé écrit random.randint(1, 7) donnerait un environ un jet sur sept, et le programme continuerait sans rien dire.
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.