Voulant participer au jeu HHCASH, un élève a décidé de s’entraîner en essayant de deviner des numéros de téléphone. Ainsi, il souhaite s’exercer sur une application qui propose un numéro de téléphone TEL obtenu par la concaténation de 8 chiffres aléatoires ; l’élève, qui a le rôle de joueur, essaiera de deviner le numéro en question en proposant à chaque fois une chaine de 8 chiffres P. L’application génère un tableau G de 8 cases qui sera affiché lors de chaque essai afin de guider le joueur sur son prochain essai et ce de la manière suivante :
- La case i de G contient 0 si le chiffre P[i] de la proposition ne figure pas dans le numéro TEL.
- La case i de G contient 1 si le chiffre P[i] figure dans le numéro TEL et il est bien placé.
- La case i de G contient 2 si le chiffre P[i] figure dans le numéro TEL mais il est mal placé.
Le jeu se termine lorsque le joueur devine le numéro proposé par l’application (TEL = P) ou lorsque le nombre d’essais atteint 6.
Exemple : L’application a proposé aléatoirement le numéro TEL = ‘’51784218’’ (c’est la concaténation de 8 chiffres aléatoires)
(Description d’un essai)
Le joueur propose la chaîne de 8 chiffres P=’49167813’
Le tableau généré est le suivant :
G :
2 | 0 | 2 | 0 | 2 | 2 | 1 | 0 |
Explication :
G[1] contient 2 car le chiffre ‘’4’’ de P (P[1]) existe dans TEL mais il n’est pas bien placé
G[2] contient 0 car le chiffre ‘’9’’ de P (P[2]) n’existe pas dans TEL
G[7] contient 1 car le chiffre ‘’1’’ de P (P[7]) existe dans TEL et il est bien placé
A la fin du jeu, l’un de ces 2 messages sera affiché :
- Bravo, vous avez deviné le numéro de téléphone
- Désolé, le numéro de téléphone à deviner était 51784218
Voici le principe de l'algorithme pour le jeu de devinette de numéro de téléphone :
1- Génération du numéro de téléphone (TEL
)
Générer un numéro de téléphone TEL
composé de 8 chiffres aléatoires. Chaque chiffre est compris entre 0 et 9.
Stocker TEL
pour le comparer aux propositions du joueur.
2- Initialisation du jeu
Définir un compteur d'essais, initialisé à 0.
Définir un nombre maximum d'essais, par exemple 6.
3- Boucle de jeu
Tant que le joueur n'a pas deviné le numéro (c'est-à-dire P != TEL
) et que le nombre d'essais est inférieur au maximum autorisé :
1. Lecture de la proposition (P
) : Demander au joueur de proposer une chaîne de 8 chiffres.
2. Initialisation du tableau de guidage (G
) : Créer un tableau G
de 8 cases, initialement rempli de zéros.
3. Comparaison des chiffres :
Pour chaque position i
de 0 à 7 :
Si le chiffre proposé P[i]
est égal à TEL[i]
, alors G[i] = 1
.
Si le chiffre proposé P[i]
est différent de TEL[i]
, mais qu'il figure ailleurs dans TEL
, alors G[i] = 2
.
Si le chiffre proposé P[i]
n'existe pas dans TEL
, alors G[i] = 0
.
4- Affichage du tableau G
: Afficher le tableau G
pour indiquer au joueur les indices sur sa proposition.
5- Incrémentation du compteur d'essais : Augmenter le compteur d'essais de 1.
4. Terminaison du jeu
Le jeu se termine si l'une des conditions suivantes est remplie :
Le joueur a deviné le numéro (P == TEL
). Afficher un message de victoire.
Le joueur atteint le nombre maximum d'essais sans deviner le numéro. Afficher un message de défaite, ainsi que le numéro TEL
caché.
Dans cet algorithme, On va utiliser trois fonctions et deux procédures :
Algorithme du programme principal
1 2 3 4 |
Algorithme jeu_devinette Debut jeu() Fin |
La fonction verif_tel
Cette fonction vérifie si le numéro saisi est composé de huit chiffres.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
fonction verif_tel(ch) Début Si long(ch)=8 alors i<-0 Tant que '0'<=ch[i]<='9' et i<7 faire i<-i+1 Faire tant que Si '0'<=ch[i]<='9' alors retourner Vrai Sinon retourner Faux finsi Sinon retourner Faux Fin si Fin |
Déclaration des objets
Objet | Type / Nature |
i | entier |
La fonction saisie
Cette fonction saisit un numéro de téléphone formé de huit chiffres.
1 2 3 4 5 6 7 8 9 10 |
fonction saisie() Début Ecrire('donner numero telephone forme de 8 chiffres: ') lire (ch) Tant que verif_tel(ch)=Faux faire Ecrire('donner numero telephone forme de 8 chiffres: ') lire (ch) Fin tant que retourner ch Fin |
Déclaration des objets
Objet | Type / Nature |
ch | chaine des caracteres |
La fonction proposer_numero
Cette fonction génère un numéro de téléphone TEL
composé de 8 chiffres aléatoires.
1 2 3 4 5 6 7 8 9 10 |
fonction divisible_9(n:entier) Début tel<-'' Pour i de 0 à 7 faire chiffre<-aleatoire(0, 9) c<-Convch(chiffre) tel<-tel+c Fin pour retourner tel Fin |
Déclaration des objets
Objet | Type / Nature |
tel | chaine des caracteres |
i | entier |
chiffre | entier |
c | caractere |
La procédure afficher
Cette procédure affiche le tableau G contenant le résultat de la comparaison entre le numéro de téléphone et le numéro saisi par le joueur.
1 2 3 4 5 6 |
fonction afficher(g:tab) Début Pour i de 0 à 7 faire Ecrire(g[i]) Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
i | entier |
La procédure jeu
Cette procédure va exécuter le jeu.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
Procédure jeu() Début essai<-0 tel<-proposer_numero() p<-saisie() Tant que (essai<5) et (tel!=p) faire # recherche des chiffres qui existent dans TEL et ils sont bien places tel1<-tel Pour i de 0 à 7 faire g[i]<-0 Si (p[i]=tel1[i]) alors g[i]<-1 p[i] <- 'P' tel1[i] <- 'P' Fin si Fin pour # recherche des chiffres qui existent dans TEL et ils ne sont pas bien places Pour i de 0 à 7 faire j<-0 Tant que ((p[i]!=tel1[j]) ou (p[i]='P')) et (j<7) faire j<-j+1 Si p[i]=tel[j] alors g[i]<-2 p[i]<-'X' tel1[i]<-'X' Fin si Fin tant que Fin pour afficher(g) essai=essai+1 p=saisie() Fin tant que Si (tel=p) alors Ecrire('Bravo vous avez trouve le bon numéro de téléphone') sinon Ecrire('Désolé le numéro de téléphone à deviner était '+tel) Fin |
Déclaration des objets
Objet | Type / Nature |
essai | entier |
i | entier |
j | entier |
tel | chaine des caracteres |
tel1 | chaine des caracteres |
p | chaine des caracteres |
g | tableau de 30 entiers |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
from numpy import array import random g=array([int()]*30) def verif_tel(ch): if len(ch)==8: i=0 while '0'<=ch[i]<='9' and i<7: i=i+1 if '0'<=ch[i]<='9' : return True else: return False else: return False def saisie() : ch=input('donner numero telephone forme de 8 chiffres: ') while verif_tel(ch)==False : ch=input('donner numero telephone forme de 8 chiffres: ') return ch def proposer_numero(): tel='' for i in range(8): chiffre=random.randrange(0, 9) c=str(chiffre) tel=tel+c return tel def afficher(g): for i in range(8): print(g[i],end='') def jeu(): essai=0 tel=proposer_numero() #print(tel) p=saisie() #print(p) while (essai<5) and (tel!=p): # recherche des chiffres qui existent dans TEL et ils sont bien places tel1=tel for i in range(8) : g[i]=0 if (p[i]==tel1[i]): g[i]=1 temp = list(p) temp[i] = 'P' p=''.join(temp) temp = list(tel1) temp[i] = 'P' tel1=''.join(temp) # recherche des chiffres qui existent dans TEL et ils ne sont pas bien places for i in range(8): j=0 while ((p[i]!=tel1[j]) or (p[i]=='P')) and (j<7): j=j+1 if p[i]==tel[j] : g[i]=2 temp = list(p) temp[i] = 'X' p=''.join(temp) temp = list(tel1) temp[j] = 'X' tel1=''.join(temp) #print(p) #print(tel1) afficher(g) essai=essai+1 p=saisie() if(tel==p): print('Bravo vous avez trouve le bon numéro de téléphone') else: print('Désolé le numéro de téléphone à deviner était '+tel) #programme principal jeu() |
Exécution du programme
Pour créer une application en Python pour deviner des numéros de téléphone en utilisant Qt Designer pour l'interface graphique, suivez ces étapes :
a- Ouvrez Qt Designer et créez un nouveau fichier de type Main Window.
b- Ajoutez ces widgets:
QLineEdit
nommé 'p' pour entrer un numéro de téléphone formé de 8 chiffres.
QPushButton
nommé 'test_bt' pour exécuter le module jeu.
QLabel
nommé 'msg' pour afficher un message d'erreur et le résultat de la recherche du numéro de téléphone.
Enregistrez le fichier avec l'extension .ui
, par exemple jeu-telephone-interface.ui
.
Voici un exemple de script Python qui utilise l'interface graphique générée par Qt Designer.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
from PyQt5.uic import loadUi from PyQt5 import QtCore, QtGui from PyQt5.QtWidgets import * from PyQt5 import QtCore, QtGui, QtWidgets from numpy import array import random app = QApplication([]) windows = loadUi ("jeu-telephone-interface.ui") g=array([int()]*30) def verif_tel(ch): if len(ch)==8: i=0 while '0'<=ch[i]<='9' and i<7: i=i+1 if '0'<=ch[i]<='9' : return True else: return False else: return False def proposer_numero(): tel='' for i in range(8): chiffre=random.randrange(0, 9) c=str(chiffre) tel=tel+c return tel def afficher(g): for i in range(8): print(g[i],end='') print() def jeu(): tel=proposer_numero() print(tel) p=windows.p.text() if verif_tel(p): if (tel!=p): # recherche des chiffres qui existent dans TEL et ils sont bien places tel1=tel for i in range(8) : g[i]=0 if (p[i]==tel1[i]): print('true') g[i]=1 temp = list(p) temp[i] = 'P' p=''.join(temp) temp = list(tel1) temp[i] = 'P' tel1=''.join(temp) # recherche des chiffres qui existent dans TEL et ils ne sont pas bien places for i in range(8): j=0 while ((p[i]!=tel1[j]) or (p[i]=='P')) and (j<7): j=j+1 if p[i]==tel[j] : g[i]=2 temp = list(p) temp[i] = 'X' p=''.join(temp) temp = list(tel1) temp[j] = 'X' tel1=''.join(temp) print(p) print(tel1) afficher(g) essai='' for i in range(8): essai=essai+str(g[i]) # afficher les elements du tableau g windows.msg.setText(essai) else: windows.msg.setText('Bravo vous avez trouve le bon numero de telephone') else: windows.msg.setText('Saisir un numéro de téléphone forme de 8 chiffres'); windows.test_bt.clicked.connect(jeu) windows.show() app.exec_() |
Exécution du programme
Vous pouvez voir aussi :
La robotique éducative joue un rôle important dans l'éducation des enfants et des jeunes en les aidant à acquérir des compétences en science et technologie.
Dans ce cadre notre site web représente une excellente ressource pour les parents, les enseignants et les enfants qui souhaitent découvrir la robotique.
Zaouiet Kontech-Jemmel-Monastir-Tunisie
+216 92 886 231
medaliprof@gmail.com
Site robotique réalisé par Mohamed Ali-Prof Info