RETROGICIEL
LE NOMBRE MYSTERE
RETROGICIEL
LE NOMBRE MYSTERE
⇩. Présentation
Voici un petit divertissement rapide à programmer qui permet aux novices d'acquérir un certain nombre de bases de la programmation, tout en découvrant les éléments fondamentaux d'un langage : saisie de données, controle du flux en fonction des valeurs saisies, affichage de texte en réponse aux choix faits.
Mais de quoi est-il question ? C'est très simple : l'ordinateur va choisir un nombre entre 1 et 100 et l'utilisateur aura jusqu'à 6 essais pour le retrouver. Alors serez-vous avez futé pour déjouer la machine ?
⇩. Consignes
Le programme doit :
choisir un nombre aléatoirement entre 1 et 100
demander à l'utilisateur de saisir un nombre et ;
afficher gagné, si le nombre est le bon ,
afficher plus petit si le nombre mystère est plus petit ;
afficher plus grand si le nombre mystère est plus grand ;
tester s'il reste des essais et ;
proposer un nouvel essai s'il en reste ;
afficher le nombre mystère et indiquant perdu.
D'abord, faite-le fonctionner. Ensuite, faite-le beau. Enfin, faite-le performant.
Amusez-vous bien !
Télécharger RETROGICIEL - Le nombre mystère.
Cette présentation nécessite que Python 3 soit installé sur votre machine.
Après avoir téléchargé le fichier Le nombre mystère.7z, décompressez-le dans le répertoire de votre choix.
Ouvrez le répertoire qui vient d'être créé.
Lancez le fichier Retrogiciel.py.
Cliquez sur l'onglet RUN et testez le programme.
Créez votre propre script dans un des langages proposés ou un autre de votre choix.
Le répertoire contient aussi :
- Python.py, l'exemple en PYTHON sans tkinter ;
- Tkinter.py, l'exemple en PYTHON avec tkinter ;
- Qb84.bas, l'exemple en QBASIC avec qb64 ;
- Bbc.bas, l'exemple en BBC BASIC avec bbc sdl.
# --- Origine Nerd ---
# --- RETROGICIEL - PYTHON ---
# --- Le nombre mystère ---
# -*- coding: utf-8 -*-
# --- Modules de la bibliothèque standard ---
import random
# --- PRESENTATION ---
print ( "LE NOMBRE MYSTERE." )
print ( "Vous avez 6 essais pour découvrir" )
print ( "le nombre mystère, entre 1 et 100," )
print ( "choisi par l'ordinateur." )
print ( )
# --- BOUCLE PRINCIPALE ---
while True :
# --- Choix aléatoire du nombre mystère ---
kmystere = random.randint ( 1 , 100 )
ktrouve = "non"
# --- Saisie des 6 essais ---
for kessais in range ( 1 , 7 ) :
print ( )
kchoix = input ( f"Essai n°{ kessais }. Entrez votre choix ... " )
try :
knombre = int ( kchoix )
except :
print ( "erreur de saisie !" )
continue
# --- Le joueur a trouvé le nombre mystère
if knombre == kmystere :
ktrouve = "oui"
break
# --- Le joueur n'a pas trouvé le nombre mystère ---
else :
kplace = "plus grand" if knombre < kmystere else "plus petit"
print ( f"Le nombre mystère est { kplace } que { knombre }." )
# --- Partie gagnée ---
print ( )
if ktrouve == "oui" :
print ( "Félicitation ! Vous avez GAGNÉ." )
print ( f"Le nombre mystère était bien { kmystere }." )
# --- Partie perdue ---
else :
print ( "Partie terminée. Vous avez PERDU." )
print ( f"Le nombre mystère était { kmystere }." )
# --- Choix du bouclage du programme ---
print ( )
kchoix = input ( "Une autre partie (O ou N) ?" )
if kchoix.upper ( ) == "N" : break
# --- FIN DU PROGRAMME ---
print ( "Au revoir" )
# --- Programme : JFB ---
# --- Aout 2025 ---
# --- Fin ---
Pour mieux comprendre l'exemple en PYTHON sans tkinter.
# --- Origine Nerd ---
# --- RETROGICIEL - TKINTER ---
# --- Le nombre mystère ---
# -*- coding: utf-8 -*-
# --- IMPORTATION DES MODULES ---
# --- Modules de la bibliothèque standard ---
import tkinter
import random
# --- DÉFINITION DES FONCTIONS PERSONNALISEES ---
# --- Nouvelle partie ---
def FNC_Nouveau ( ) :
BUT_Action [ "state" ] = "normal"
BUT_Nouveau [ "state" ] = "disabled"
LAB_Essais [ "text" ] = f"Essai : 1"
LAB_Message [ "text" ] = f"...\n..."
TKV_Nombre.set ( "" )
TKV_Mystere.set ( random.randint ( 1 , 100 ) )
ENT_Nombre.focus_force ( )
# --- Partie terminée ---
def FNC_Termine ( Q ) :
BUT_Action [ "state" ] = "disabled"
BUT_Nouveau [ "state" ] = "normal"
if Q == "gagne" :
LAB_Message [ "text" ] = f"Le nombre mystère était { TKV_Mystere.get ( ) }.\nFélicitation, c'est gagné."
else :
LAB_Message [ "text" ] = f"Le nombre mystère était { TKV_Mystere.get ( ) }.\nVous avez perdu."
# --- Valider et analyser le choix du joueur ---
def FNC_Valider ( ) :
# --- Controle et validation du choix ---
try : knombre = int ( TKV_Nombre.get ( ) )
except : knombre = 0
# --- Le joueur a trouvé le bon nombre ---
if knombre == TKV_Mystere.get ( ) :
FNC_Termine ( "gagne" )
return
# --- Le joueur n'a pas saisi un nombre ---
elif knombre == 0 or knombre > 100 :
LAB_Message [ "text" ] = f"Vous devez saisir un nombre\nentre 1 et 100."
# --- Le joueur n'a pas trouvé le nombre ---
else :
kplace = "plus grand" if knombre < TKV_Mystere.get ( ) else "plus petit"
LAB_Message [ "text" ] = f"Le nombre mystère est\n{ kplace } que { TKV_Nombre.get ( ) }"
# --- Essais suivant ---
kessai = int ( LAB_Essais [ "text" ] [ -1 ] )
if kessai == 6 :
FNC_Termine ( "perdu" )
return
else :
LAB_Essais [ "text" ] = f"Essai : { kessai + 1 }"
TKV_Nombre.set ( "" )
ENT_Nombre.focus_force ( )
# --- CREATION DE L'INTERFACE GRAPHIQUE ---
# --- Création de la fenêtre principale ---
TKI_Principal = tkinter.Tk ( )
TKI_Principal.title ( "RETROGICIEL - Le poids idéal" )
# --- Création des variables de controles ---
TKI_Genre = tkinter.StringVar ( )
# --- Création des controles nommées ---
ENT_Taille = tkinter.Entry ( TKI_Principal , width = 5 )
LAB_Resultat = tkinter.Label ( TKI_Principal , text = "\nen attente\n...\n" )
# --- Mise en place des controles (anonymes et nommés) dans la fenêtre principale ---
tkinter.Label ( TKI_Principal , text = "\nLE POIDS IDEAL.\n" ).grid ( row = 0 , column = 0 , columnspan = 3 , sticky = "nesw" )
tkinter.Label ( TKI_Principal , text = "Indiquez votre genre : " ).grid ( row = 1 , column = 0 , sticky = "e" )
tkinter.Radiobutton ( TKI_Principal , text = "Garçon" , value = "garcon" , variable = TKI_Genre ).grid ( row = 1 , column = 1 , sticky = "w" )
tkinter.Radiobutton ( TKI_Principal , text = "Fille" , value = "fille" , variable = TKI_Genre ).grid ( row = 1 , column = 2 , sticky = "w" )
tkinter.Label ( TKI_Principal , text = "Entrez votre taille en cm : " ).grid ( row = 2 , column = 0 , sticky = "e" )
ENT_Taille.grid ( row = 2 , column = 1 , sticky = "nesw" )
tkinter.Button ( TKI_Principal , text = "Calculer" , command = FNC_Calculer ).grid ( row = 2 , column = 2 , sticky = "nesw" )
LAB_Resultat.grid ( row = 3 , column = 0 , columnspan = 2 , sticky = "nesw" )
tkinter.Button ( TKI_Principal , text = "Quitter" , command = TKI_Principal.destroy ).grid ( row = 3 , column = 2 , sticky = "nesw" )
# --- Mise à jour de controle ---
TKI_Genre.set ( "fille" )
# --- DEBUT DU PROGRAMME ---
TKI_Principal.mainloop ( )
# --- Programme : JFB ---
# --- Juillet 2025 ---
# --- Fin ---
Pour mieux comprendre l'exemple en PYTHON avec tkinter.
' --- Origine Nerd propose pour ---
' --- RETROGICIEL - QB64 ---
' --- Le nombre mystere ---
' --- INITIALISATION GENERALE ---
' --- Initialisation globale ---
RANDOMIZE TIMER
' --- DEBUT DU PROGRAMME ---
PRINT "LE NOMBRE MYSTERE."
PRINT "Vous avez 6 essais pour découvrir"
PRINT "le nombre mystère, entre 1 et 100,"
PRINT "choisi par l'ordinateur."
' --- BOUCLE PRINCIPALE ---
DO
' --- Choix aleatoire du nombre mystere ---
kmystere = INT(RND * 100) + 1
ktrouve$ = "non"
' --- Saisie des 6 essais ---
FOR kessais = 1 TO 6
PRINT "Essai"; STR$(kessais); ". Entrez votre choix ";
INPUT kchoix
' --- Analyse du nombre saisi ---
IF kchoix = kmystere THEN
ktrouve$ = "oui"
EXIT FOR
ELSE
IF kchoix < kmystere THEN kplace$ = "plus grand" ELSE kplace$ = "plus petit"
PRINT "Le nombre mystere est "; kplace$; " que"; STR$(kchoix); "."
END IF
NEXT kessais
' --- Partie terminee ---
IF ktrouve$ = "oui" THEN
PRINT "Felicitation ! Vous avez GAGNE."
PRINT "Le nombre mystere etait bien"; STR$(kmystere); "."
ELSE
PRINT "Partie terminee. Vous avez PERDU."
PRINT "Le nombre mystere etait"; STR$(kmystere); "."
END IF
' --- Bouclage du programme ---
INPUT "Voulez-vous recommencer [ O ou N ] "; kchoix$
LOOP UNTIL UCASE$(kchoix$) = "N"
' --- FIN DU PROGRAMME ---
PRINT "Au revoir."
END
' --- Programme : JFB ---
' --- Aout 2025 ---
' --- Fin ---
Pour mieux comprendre l'exemple en QB64.
REM --- Origine Nerd propose pour ---
REM --- RETROGICIEL - BBC BASIC ---
REM --- Le nombre mystere ---
REM --- DEBUT DU PROGRAMME ---
PRINT "LE NOMBRE MYSTERE."
PRINT "Vous avez 6 essais pour decouvrir"
PRINT "le nombre mystere, entre 1 et 100,"
PRINT "choisi par l'ordinateur."
REM --- BOUCLE PRINCIPALE ---
REPEAT
REM --- Choix aleatoire du nombre mystere ---
kmystere = RND( 100 )
ktrouve$ = "non"
REM --- Saisie des 6 essais ---
FOR kessais = 1 TO 6
PRINT "Essai " ; kessais ;". Entrez votre choix " ;
INPUT kchoix
REM --- Analyse du nombre saisi ---
IF kchoix = kmystere THEN
ktrouve$ = "oui"
EXIT FOR kessais
ELSE
IF kchoix < kmystere THEN kplace$ = "plus grand" ELSE kplace$ = "plus petit"
PRINT "Le nombre mystere est " ; kplace$ ; " que " ; STR$( kchoix ) ; "."
ENDIF
NEXT kessais
REM --- Partie terminee ---
IF ktrouve$ = "oui" THEN
PRINT "Felicitation ! Vous avez GAGNE."
PRINT "Le nombre mystere etait bien " ; STR$( kmystere ) ; "."
ELSE
PRINT "Partie terminee. Vous avez PERDU."
PRINT "Le nombre mystere etait " ; STR$( kmystere ) ; "."
ENDIF
REM --- Bouclage du programme ---
INPUT "Voulez-vous recommencer [ O ou N ] " ; kchoix$
UNTIL kchoix$ = "N" OR kchoix$ = "n"
REM --- FIN DU PROGRAMME ---
PRINT "Au revoir."
END
REM --- Programme : JFB ---
REM --- Aout 2025 ---
REM --- Fin ---
Pour mieux comprendre l'exemple en BBC BASIC.