Le jeu du nombre caché
Ton ami pense à un nombre entre 1 et 100. Tu as le droit de poser des questions. Il répond seulement : « Plus grand » ou « Plus petit ».
Tu ne vas pas dire 1, puis 2, puis 3. Tu dirais 50. Et si c'est « plus petit », tu sais déjà que la moitié des nombres ne sert plus.
Cette ruse est un algorithme célèbre. Tu vas l'écrire.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Liste triée | Une liste rangée du plus petit au plus grand. | [3, 8, 12, 15] |
| Milieu | La case du centre de la zone où on cherche. | Entre les cases 0 et 10 : la case 5 |
| Intervalle | La zone de la liste où la valeur peut encore se cacher. | De la case 6 à la case 10 |
| Dichotomie | Une façon de chercher qui coupe la zone en deux à chaque coup. | Le jeu du nombre caché |
| Division entière | Une division qui garde seulement la partie entière du résultat. On l'écrit //. | 7 // 2 donne 3 |
| Coup | Un essai : on regarde une case et on compare. | Proposer 50 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
À toi : joue d'abord
À toi de jouer
À toi : joue d'abord
3 questionsTes réponses sont corrigées ici et ne sont pas conservées. Un compte garde tes résultats.
Exemple travaillé : le nombre caché est 37
| Coup | Intervalle possible | Proposition | Réponse |
|---|---|---|---|
| 1 | De 1 à 100 | 50 | Plus petit |
| 2 | De 1 à 49 | 25 | Plus grand |
| 3 | De 26 à 49 | 37 | Trouvé ! |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Calculer le milieu
Le milieu de 1 et 100 est (1 + 100) divisé par 2. Cela donne 50,5. Mais une case ou un nombre entier ne s'écrit pas avec une virgule.
En Python, la division entière // garde la partie entière : 101 // 2 donne 50. On l'utilise toujours pour le milieu.
À toi : le jeu joué par Python
secret = 37
bas = 1
haut = 100
proposition = (bas + haut) // 2
coups = 1
print("Coup", coups, ": je propose", proposition)
while proposition != secret:
if proposition < secret:
bas = proposition + 1
else:
haut = proposition - 1
proposition = (bas + haut) // 2
coups = coups + 1
print("Coup", coups, ": je propose", proposition)
print("Trouvé en", coups, "coups !")
# Change secret en 1, puis en 100. Combien de coups faut-il ?
Dans une liste triée
Pour chercher dans une liste, on fait pareil. Mais la liste doit être triée, du plus petit au plus grand. Sinon, « plus petit » ne veut rien dire.
On garde deux numéros de case : debut et fin. La valeur est forcément entre les deux. On regarde la case du milieu.
Exemple : on cherche 40 dans 3, 8, 12, 15, 21, 27, 34, 40, 46, 52, 60. Il y a 11 cases, de 0 à 10.
Exemple travaillé : chercher 40 dans la liste
| Coup | debut | fin | milieu | Case du milieu | Que faire ? |
|---|---|---|---|---|---|
| 1 | 0 | 10 | 5 | 27 | 27 < 40 : debut = 6 |
| 2 | 6 | 10 | 8 | 46 | 46 > 40 : fin = 7 |
| 3 | 6 | 7 | 6 | 34 | 34 < 40 : debut = 7 |
| 4 | 7 | 7 | 7 | 40 | Trouvé : indice 7 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.