L'ordinateur "choisit" un nombre entier "au hasard" entre 1 et 1000.
Vous devez deviner ce nombre en faisant le moins de propositions possibles et pour chaque proposition faite l'ordinateur vous "dit" si votre proposition est, plus petite ou plus grande que le nombre du départ
Voici un algorithme possible
nombre_inconnu <- entier_aléatoire(1,1000)
proposition <- entrer("Entrez un nombre entier entre 1 et 1000")
Tant que proposition est différent du nombre_inconnu
début
si proposition < nombre_inconnu
afficher("Votre nombre est plus petit que celui de l'ordinateur")
sinon si proposition > nombre_inconnu
afficher("Votre nombre est plus grand que celui de l'ordinateur")
findesi
proposition <- entrer("Entrez un nombre entier entre 1 et 1000")
fin
afficher("Bravo, Vous avez trouvé le nombre : ",nombre_inconnu)
Traduire en python l'algorithme ci-dessus :
from random import *
nombre_inconnu = randint(1,1000)
proposition = int(input("Entrez un nombre entier entre 1 et 1000 -> "))
while proposition != nombre_inconnu:
.........
print("Bravo, Vous avez trouvé le nombre : ",nombre_inconnu)
Maintenant on échange les rôles
Comment aider l'ordinateur avec un algorithme pour que ce dernier réussisse à trouver le nombre choisit par l'humain ?
L'ordinateur va mémoriser un intervalle de possibilités [choix_min; choix_max] au début cet intervalle est [1;1000], puis en fonction de la réponse faite par l'humain on va diviser par deux la taille de cet intervalle (dichotomie)
La taille de l'intervalle diminuant on finira par "tomber" sur la bonne valeur
On convient que si la proposition de l'ordinateur est plus petite que le nombre choisi par l'humain, ce dernier doit entrer -1, à l'inverse si la proposition de l'ordinateur est plus grande que le nombre choisi par l'humain, ce dernier doit entrer 1, et en cas d'égalité il doit entrer 0
Voici un algorithme possible
choix_min <- 0
choix_max <- 1000
proposition_ordinateur <- (choix_min + choix_max)//2
Tant que Vrai :
afficher("je propose ", proposition_ordinateur)
afficher(" Si ma proposition est plus petite que votre nombre entrez -1")
afficher(" Si ma proposition est plus grande que votre nombre entrez 1")
afficher(" Si ma proposition est égale à votre nombre entrez 0")
reponse_humain = entrer(" ---> ")
si reponse_humain = -1:
choix_min <- proposition_ordinateur
proposition_ordinateur <- (choix_min + choix_max)//2
sinon si reponse_humain = 1:
choix_max <- proposition_ordinateur
proposition_ordinateur <- (choix_min + choix_max)//2
sinon:
sortir de la boucle
print("Trouvé !")
On traduit en python le jeu "Devine un nombre" deuxième version par
from random import *
choix_min = 0
choix_max = 1000
proposition_ordinateur = (choix_min + choix_max)//2
while True :
print("je propose ", proposition_ordinateur)
print(" Si ma proposition est plus petite que votre nombre entrez -1")
print(" Si ma proposition est plus grande que votre nombre entrez 1")
print(" Si ma proposition est égale à votre nombre entrez 0")
reponse_humain = int(input(" ---> "))
if reponse_humain == -1:
choix_min = proposition_ordinateur
proposition_ordinateur = (choix_min + choix_max)//2
elif reponse_humain == 1:
choix_max = proposition_ordinateur
proposition_ordinateur = (choix_min + choix_max)//2
else:
break
print("Trouvé !")