Deviner un nombre aléatoire (correction)

Links: notebook, html ., PDF, python, slides ., GitHub

On reprend la fonction introduite dans l’énoncé et qui permet de saisir un nombre.

from tkinterquickhelper.funcwin import open_window_params
def demande_nombre(appreciation):
    # Ce programme ne fonctionne que sur si le serveur Jupyter est exécuté localement.
    params = { "nombre":"" }
    ans = open_window_params (params, title="Entrez un nombre",
                                    help_string = appreciation,
                                    key_save="alean")
    nb = int( ans["nombre"] )
    return nb

Q1 : Ecrire une jeu dans lequel python choisi aléatoirement un nombre entre 0 et 100, et essayer de trouver ce nombre en 10 étapes (avec la fonction open_window_params).

import random
n = random.randint(0,100)
appreciation = "?"
while True:
    var = demande_nombre(appreciation)
    if var < n :
        appreciation = "trop bas"
        print(var, appreciation)

    else :
        appreciation = "trop haut"
        print(var, appreciation)
    if var == n:
        appreciation = "bravo !"
        print(var, appreciation)
        break
50 trop bas
75 trop bas
80 trop bas
90 trop haut
85 trop bas
87 trop haut
86 trop haut
86 bravo !

Q2 : Transformer ce jeu en une fonction jeu(nVies)nVies est le nombre d’itérations maximum.

import random
n = random.randint(0,100)
vies = 10
appreciation = "?"
while vies > 0:
    var = demande_nombre(appreciation)
    if var < n :
        appreciation = "trop bas"
        print(vies, var, appreciation)
    else :
        appreciation = "trop haut"
        print(vies, var, appreciation)
    if var == n:
        appreciation = "bravo !"
        print(vies, var, appreciation)
        break

    vies -= 1
10 50 trop bas
9 75 trop bas
8 83 trop bas
7 92 trop haut
6 88 trop haut
5 85 trop haut
4 84 trop haut
4 84 bravo !

Q3 : Adapter le code pour faire une classe joueur avec une méthode jouer, où un joueur est défini par un pseudo et son nombre de vies. Faire jouer deux joueurs et déterminer le vainqueur.

class joueur:
    def __init__(self, vies, pseudo):
        self.vies = vies
        self.pseudo = pseudo

    def jouer(self):
        appreciation = "?"
        n = random.randint(0,100)
        while self.vies > 0:
            var = demande_nombre(appreciation + " -- " + self.pseudo + " : " + str(self.vies) + " vies restantes. Nombre choisi : ")
            if var < n :
                appreciation = "trop bas"
                print(vies, var, appreciation)
            else :
                appreciation = "trop haut"
                print(vies, var, appreciation)
            if var == n:
                appreciation = "bravo !"
                print(vies, var, appreciation)
                break

            self.vies -= 1

# Initialisation des deux joueurs
j1 = joueur(10, "joueur 1")
j2 = joueur(10, "joueur 2")

# j1 et j2 jouent
j1.jouer()
j2.jouer()

# Nombre de vies restantes à chaque joueur
print("Nombre de vies restantes à chaque joueur")
print(j1.pseudo  + " : " + str(j1.vies) + " restantes")
print(j2.pseudo  + " : " + str(j2.vies) + " restantes")

# Résultat de la partie
print("Résultat de la partie")
if j1.vies < j2.vies:
    print(j1.pseudo + "a gagné la partie")
elif j1.vies == j2.vies:
    print("match nul")
else: print(j2.pseudo + " a gagné la partie")
4 50 trop bas
4 75 trop bas
4 93 trop bas
4 95 trop bas
4 97 trop bas
4 99 trop bas
4 100 trop haut
4 100 bravo !
4 50 trop bas
4 75 trop bas
4 90 trop bas
4 10 trop bas
4 11 trop bas
4 12 trop bas
4 13 trop bas
4 14 trop bas
4 15 trop bas
4 16 trop bas
Nombre de vies restantes à chaque joueur
joueur 1 : 4 restantes
joueur 2 : 0 restantes
Résultat de la partie
joueur 2 a gagné la partie