Un jeu où l'ordinateur pose les questions
Exercice supplémentaire · niveau 3 (difficile) · sciences numériques et technologie (seconde), chapitre 7 — Projets et mini-jeux · Le nombre mystère
Énoncé
Inverser les rôles : c'est le joueur qui pense un nombre entre et , et l'ordinateur le devine en posant des questions « plus grand / plus petit / gagné ». Écrire le programme, et prévoir le cas où le joueur triche.
Corrigé
bas, haut = 1, 100
trouve = False
while bas <= haut and not trouve:
milieu = (bas + haut) // 2
r = input("Est-ce " + str(milieu) + " ? (g/p/=) ")
if r == "g":
bas = milieu + 1 # le nombre est plus grand
elif r == "p":
haut = milieu - 1
else:
trouve = True
print("Trouvé :", milieu)
if not trouve:
print("Tu as triché : tes réponses sont contradictoires.")
La détection de triche est la partie intéressante. Si le joueur ment, l'intervalle finit par se vider : bas dépasse haut, il ne reste aucun candidat. Le programme n'a pas besoin de mémoriser les réponses pour le savoir — l'intervalle vide est lui-même la preuve de l'incohérence.
C'est un invariant, au sens du chapitre 4 : « le nombre cherché est toujours entre bas et haut ». Tant qu'il tient, tout va bien ; quand il ne peut plus tenir, c'est que l'hypothèse de départ était fausse.
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.