45 lines
1.6 KiB
Markdown
45 lines
1.6 KiB
Markdown
|
|
# 01 — Le Nombre Mystère
|
||
|
|
|
||
|
|
**Algorithme :** Recherche dichotomique
|
||
|
|
**Difficulté :** Facile
|
||
|
|
**Durée estimée :** 45 min — 1h
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Contexte
|
||
|
|
|
||
|
|
Vous pensez à un nombre entre 1 et 100. L'ordinateur doit le deviner le plus vite possible en posant des questions.
|
||
|
|
|
||
|
|
À chaque essai, vous répondez :
|
||
|
|
- `<` si votre nombre est **plus petit** que la proposition
|
||
|
|
- `>` si votre nombre est **plus grand**
|
||
|
|
- `=` si c'est **le bon nombre**
|
||
|
|
|
||
|
|
L'ordinateur utilise la **recherche dichotomique** : à chaque question, il coupe l'intervalle possible en deux.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Étapes
|
||
|
|
|
||
|
|
### Étape 1 — Comprendre la stratégie
|
||
|
|
Sans coder, répondez sur papier : si le nombre est entre 1 et 100, quelle est la première proposition optimale ? Pourquoi ?
|
||
|
|
|
||
|
|
### Étape 2 — Implémenter `devine()`
|
||
|
|
Complétez la fonction `devine()` dans `starter.py` :
|
||
|
|
- L'ordinateur part de `gauche = 1` et `droite = 100`
|
||
|
|
- Il propose `milieu = (gauche + droite) // 2`
|
||
|
|
- Selon la réponse, il réduit l'intervalle
|
||
|
|
- Il compte le nombre d'essais
|
||
|
|
|
||
|
|
### Étape 3 — Tester
|
||
|
|
Lancez le programme et jouez plusieurs parties. Vérifiez que l'ordinateur trouve toujours en **7 essais maximum**.
|
||
|
|
|
||
|
|
### Étape 4 — Extension (si vous avez le temps)
|
||
|
|
Ajoutez une deuxième version où **c'est vous** qui devez deviner le nombre de l'ordinateur. L'ordinateur choisit un nombre aléatoire (`random.randint(1, 100)`), et le programme vous dit si vous êtes trop grand ou trop petit. Comptez vos essais et comparez avec le maximum optimal.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Ce que vous devez rendre
|
||
|
|
- Le programme qui fonctionne
|
||
|
|
- La réponse à la question : pourquoi 7 essais suffisent toujours pour 100 nombres ?
|