Mini-projets algorithmique, corrigé TP KNN, news, notebooks IA
This commit is contained in:
41
algorithmes/mini-projets/01_devine_nombre/starter.py
Normal file
41
algorithmes/mini-projets/01_devine_nombre/starter.py
Normal file
@@ -0,0 +1,41 @@
|
||||
# Projet 01 — Le Nombre Mystère
|
||||
# Algorithme : Recherche dichotomique
|
||||
|
||||
def devine():
|
||||
"""
|
||||
L'ordinateur devine le nombre auquel pense l'utilisateur
|
||||
en utilisant la recherche dichotomique.
|
||||
"""
|
||||
print("=== Le Nombre Mystère ===")
|
||||
print("Pense à un nombre entre 1 et 100 (sans le dire !)")
|
||||
print("Réponds avec : < (trop grand), > (trop petit), = (trouvé !)")
|
||||
print()
|
||||
|
||||
gauche = 1
|
||||
droite = 100
|
||||
nb_essais = 0
|
||||
|
||||
while gauche <= droite:
|
||||
milieu = (gauche + droite) // 2
|
||||
nb_essais += 1
|
||||
|
||||
reponse = input(f"Essai {nb_essais} — Est-ce que ton nombre est {milieu} ? ")
|
||||
|
||||
if reponse == "=":
|
||||
print(f"Trouvé ! C'était bien {milieu}, en {nb_essais} essai(s) !")
|
||||
return
|
||||
elif reponse == "<":
|
||||
# TODO : le nombre cherché est plus petit que milieu
|
||||
# Que faut-il modifier ? gauche ou droite ?
|
||||
pass
|
||||
elif reponse == ">":
|
||||
# TODO : le nombre cherché est plus grand que milieu
|
||||
pass
|
||||
else:
|
||||
print("Réponse invalide, utilise <, > ou =")
|
||||
|
||||
print("Je n'ai pas trouvé... tu as peut-être changé de nombre !")
|
||||
|
||||
|
||||
# --- Programme principal ---
|
||||
devine()
|
||||
44
algorithmes/mini-projets/01_devine_nombre/sujet.md
Normal file
44
algorithmes/mini-projets/01_devine_nombre/sujet.md
Normal file
@@ -0,0 +1,44 @@
|
||||
# 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 ?
|
||||
Reference in New Issue
Block a user