Le jeu contre l'ordinateur⚓︎
Jouer une manche⚓︎
Stratégie optimale
Il existe une stratégie optimale pour ce jeu. Si les deux joueurs savent jouer parfaitement, ils savent qui va gagner la partie avant même de commencer.
Selon le nombre d'allumettes restantes, il est possible de déterminer si le joueur dont c'est le tour est en position gagnante ou perdante. S'il est en position gagnante, alors il peut déterminer combien d'allumettes prendre pour mettre l'autre joueur en position perdante. Au contraire, un joueur en position perdante, quoi qu'il fasse, va laisser l'autre joueur en position gagnante.
Pour déterminer ces positions, il faut partir du début. S'il n'y a pas d'allumettes, le joueur a perdu. S'il y en a une, deux ou trois, il est en position gagnante, puisqu'il peut toutes les prendre.
Exercice 3
Répondre sur la feuille.
Exercice 4
Compléter la fonction demander_ordi
qui prend en paramètre nb_allumettes
et qui permet à l'ordinateur de choisir le bon nombre d'allumettes s'il est en position gagnante. En position perdante, il choisit au hasard le nombre à prendre.
Choisir un entier au hasard
La fonction randint
, définie dans le module random
, prend deux entiers a
et b
en paramètres et renvoie un entier pris au hasard entre a
et b
inclus.
Ainsi randint(1, 3)
va renvoyer aléatoirement 1, 2 ou 3.
def demander_ordi(nb_allumettes):
if nb_allumettes%4 == ...:
return randint(1, 3)
else:
return ...
>>> demander_ordi(13)
1
>>> demander_ordi(14)
2
>>> demander_ordi(4) # il va répondre au hasard
1
>>> demander_ordi(4) # il va répondre au hasard
3
Exercice 5
Répondre sur la feuille puis compléter le code de la fonction manche_ordi
qui prend en paramètre un entier nb_allumettes
et qui permet de jouer une manche contre l'ordinateur avec nb_allumettes
allumettes au départ.
def manche_ordi(nb_allumettes):
joueur = 2
while ...:
if joueur == 1:
joueur = ...
choix = demander_ordi(nb_allumettes)
print("L'ordinateur prend", choix, "allumette(s)")
else:
joueur = ...
print("Au tour du joueur", joueur)
choix = demander_joueur(nb_allumettes)
nb_allumettes = ...
if ...:
print("Le joueur a battu l'ordinateur.")
else:
print("L'ordinateur a gagné.")
# return joueur (1)
- Cette ligne servira plus tard.
>>> manche_ordi(15)
Au tour du joueur 1
Il reste 15 allumette(s)
Combien d'allumettes voulez-vous ? 3
L'ordinateur prend 3 allumette(s)
Au tour du joueur 1
Il reste 9 allumette(s)
Combien d'allumettes voulez-vous ? 2
L'ordinateur prend 3 allumette(s)
Au tour du joueur 1
Il reste 4 allumette(s)
Combien d'allumettes voulez-vous ? 1
L'ordinateur prend 3 allumette(s)
L'ordinateur a gagné.
Jouer une partie de plusieurs manches⚓︎
Jouer plusieurs manches
Nous allons maintenant rajouter la possibilité de jouer plusieurs manches et celui qui en gagne le plus remportera la partie.
La partie s'arrête lorsque les nb_manches
manches on été jouées. Le joueur ayant gagné le plus de manches est alors désigné vainqueur. S'ils ont tous les deux gagné le même nombre de manches, il y a égalité.
Toutes les manches seront jouées même si un des joueurs n'a plus aucune chance de remporter la partie.
Exercice 6
Répondre sur la feuille puis décommenter les lignes return joueur
à la fin des fonctions manche
et manche_ordi
.
Compléter le code de la fonction partie
qui prend en paramètres deux entiers nb_manches
et nb_allumettes
, et qui permet de faire nb_manches
manches avec nb_allumettes
chacune.
def partie(nb_manches, nb_allumettes):
score1 = 0
score2 = 0
while ...:
gagnant = manche(nb_allumettes) # ou manche_ordi(nb_allumettes)
if gagnant == ...:
score1 = ...
else:
score2 = ...
if ...:
print("Le joueur 1 est le grand vainqueur.")
elif ...:
print("Le joueur 2 est le grand vainqueur.")
else:
print("Il y a égalité.")
- Cette ligne servira plus tard.
>>> partie(3, 5) # 3 parties avec 5 allumettes
Au tour du joueur 1
Il reste 5 allumette(s)
Combien d'allumettes voulez-vous ? 3
Au tour du joueur 2
Il reste 2 allumette(s)
Combien d'allumettes voulez-vous ? 2
Le joueur 2 a gagné.
Au tour du joueur 1
Il reste 5 allumette(s)
Combien d'allumettes voulez-vous ? 1
Au tour du joueur 2
Il reste 4 allumette(s)
Combien d'allumettes voulez-vous ? 3
Au tour du joueur 1
Il reste 1 allumette(s)
Combien d'allumettes voulez-vous ? 1
Le joueur 1 a gagné.
Au tour du joueur 1
Il reste 5 allumette(s)
Combien d'allumettes voulez-vous ? 1
Au tour du joueur 2
Il reste 4 allumette(s)
Combien d'allumettes voulez-vous ? 1
Au tour du joueur 1
Il reste 3 allumette(s)
Combien d'allumettes voulez-vous ? 3
Le joueur 1 a gagné.
Le joueur 2 est le grand vainqueur.