On se propose de simuler le jeu suivant :
- Le jeu est initialisé par le choix d’un numéro de téléphone à 8 chiffres, ne commençant par zéro et qui est à deviner par un joueur.
- Le joueur propose successivement des chiffres. Pour chaque chiffre proposé, s’il est présent dans une ou plusieurs positions du numéro secret, il sera positionné aux mêmes emplacements.
- A tout moment, si le joueur pense avoir deviné le numéro secret, il peut proposer un numéro. S’il a trouvé le numéro secret, il a gagné.
- le joueur peut perdre de deux façons, soit il propose un numéro qui n’est pas le bon, soit il a proposé 5 numéros et n’a toujours trouvé le numéro cherché.
Exemple : Ci-dessous un exemple d’exécution pour le numéro secret ‘’83256221’’
La chaine de départ à afficher est :’’_ _ _ _ _ _ _ _’’
1ère exécution
Proposer un chiffre 4
Le numéro de téléphone est : _ _ _ _ _ _ _ _
Voulez-vous proposer un numéro O/N ? N
Proposer un chiffre 2
Le numéro de téléphone est : _ _ 2 _ _ 2 2 _
Voulez-vous proposer un numéro O/N ? N
Proposer un chiffre 3
Le numéro de téléphone est : _ 3 2 _ _ 2 2 _
Voulez-vous proposer un numéro O/N ? O
Proposer un numéro : 83256221
Bravo ! Vous avez gagné
2ème exécution
Proposer un chiffre 4
Le numéro de téléphone est : _ _ _ _ _ _ _ _
Voulez-vous proposer un numéro O/N ? N
Proposer un chiffre ? 2
Le numéro de téléphone est : _ _ 2 _ _ 2 2 _
Voulez-vous proposer un numéro O/N ? N
Proposer un chiffre ? 3
Le numéro de téléphone est : _ 3 2 _ _ 2 2 _
Voulez-vous proposer un numéro O/N ? N
Proposer un chiffre ? 0
Le numéro de téléphone est : _ 3 2 _ _ 2 2 _
Voulez-vous proposer un numéro O/N ? N
Proposer un chiffre ? 5
Le numéro de téléphone est : _ 3 2 5 _ 2 2 _
Proposer un numéro : 93256224
Désolé ! Vous avez perdu
Ecrire un programme Python qui permet de composer un numéro de téléphone (8 chiffres) choisi aléatoirement par l’ordinateur et simuler le jeu comme décrit ci-dessus.
Pour simuler ce jeu de devinette de numéro de téléphone à 8 chiffres, il faut mettre en place un algorithme qui gère plusieurs aspects : la génération d’un numéro de téléphone à deviner, la gestion des propositions du joueur, le suivi des indices donnés au joueur après chaque proposition de chiffre, et les conditions de victoire ou de défaite.
1- Initialisation du numéro de téléphone :
Le numéro à deviner est un entier à 8 chiffres, qui ne commence pas par zéro.
2- Propositions du joueur :
Le joueur propose un chiffre à chaque tour.
Si ce chiffre est présent dans le numéro secret, il est révélé à toutes les positions correspondantes.
Si le joueur pense avoir deviné tout le numéro, il peut soumettre une proposition complète du numéro de téléphone.
3- Conditions de victoire et de défaite :
Le joueur gagne s’il propose correctement le numéro secret.
Le joueur perd s’il propose un numéro incorrect ou s’il atteint 5 tentatives de soumission de numéros sans succès.
1- Étape d'initialisation :
Générer un numéro de téléphone aléatoire à 8 chiffres qui ne commence pas par zéro.
Initialiser un tableau pour représenter l'état du numéro deviné par le joueur (avec des positions non devinées initialisées à des « _ »).
2- Étape de jeu :
Le joueur propose un chiffre.
Vérifier si ce chiffre est présent dans le numéro secret.
Si oui, révéler ce chiffre aux positions correspondantes dans l'affichage du numéro deviné.
Si non, continuer.
Le joueur peut, à tout moment, soumettre une tentative de numéro complet.
3- Conditions de fin :
Le joueur gagne s'il devine entièrement le numéro.
Le joueur perd s'il soumet un numéro incorrect ou s’il atteint 5 propositions incorrectes.
Dans cet algorithme, On va utiliser deux fonctions:
Algorithme du programme principal
1 2 3 4 |
Algorithme jeu_devinette Debut jeu() Fin |
La fonction saisie
Cette fonction retourne un entier positif formé de 8 chiffres.
1 2 3 4 5 6 7 8 9 10 |
Procedure saisie(): Début Ecrire('donner un entier positif forme de 8 chiffres:') lire (n) Tant que n<10000000 ou n>99999999 faire Ecrire('donner un entier positif forme de 8 chiffres:') lire (n) Fin tant que retourner n Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
n | entier |
La procédure jeu
Cette procédure simule ce jeu de devinette de numéro de téléphone à 8 chiffres
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 telephone<-aleatoire(10000000, 99999999) ch<-Convch(telephone) ch1<-'________' sortir<-Faux nbr_essai<-0 Tant que ((sortir==Faux) et (nbr_essai<5)) faire nbr_essai<-nbr_essai+1 Ecrire('Voulez-vous proposer un numéro O/N: ') lire(reponse) Tant que Majus(reponse) n'est pas dans {'O','N'} : Ecrire('Voulez-vous proposer un numéro O/N: ') lire(reponse) Fin tant que Si (Majus(reponse=='O') alors sortir<-Vrai Sinon chiffre=input('Proposer un chiffre: '); Pour i de 0 à long(ch)-1 faire Si (ch[i]=chiffre) : ch1{i]<-chiffre Fin si Fin pour Ecrire('Le numéro de téléphone est ',ch1); Fin si Fin tant que numero_propose<-saisie() Si (numero_propose=telephone) alors Ecrire('Bravo! vous avez gagné') Sinon Ecrire('Desole vous avez perdu'); Fin si Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
telephone | entier |
ch | chaîne des caractères |
ch1 | chaîne des caractères |
sortir | booléen |
nbr_essai | entier |
i | entier |
reponse | caractère |
chiffre | caractère |
numero_propose | entier |
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 |
import random def saisie() : global n,m n=int(input("donner un numero de telephone compose de 8 chiffres: ")) while(n<10000000) or (n>99999999) : n=int(input("donner un numero de telephone compose de 8 chiffres: ")) return n def jeu(): telephone=random.randrange(10000000, 99999999) ch=str(telephone) ch1='________' sortir=False nbr_essai=0 while ((sortir==False) and (nbr_essai<5)): nbr_essai=nbr_essai+1 reponse=input('Voulez-vous proposer un numéro O/N: ') while reponse.upper() not in {'O','N'} : reponse=input('Voulez-vous proposer un numéro O/N: ') if (reponse.upper()=='O'): sortir=True else: chiffre=input('Proposer un chiffre: '); for i in range(len(ch)) : if (ch[i]==chiffre) : temp = list(ch1) temp[i] = chiffre ch1=''.join(temp) print('Le numéro de téléphone est ',ch1); numero_propose=saisie() if (numero_propose==telephone): print('Bravo! vous avez gagné') else: print('Désolé vous avez perdu'); #programme principal jeu() |
Exécution du programme
Pour créer une application en Python pour composer un numéro de téléphone (8 chiffres) choisi aléatoirement par l’ordinateur et simuler le jeu comme décrit ci-dessus 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:
QPushButton
nommé 'verifier_chiffre_bt' pour exécuter le module tester_chiffre.
QPushButton
nommé 'verifier_numero_bt' pour exécuter le module tester_numero.
QLabel
nommé 'msg' pour afficher un message d'erreur et le résultat de la devinette du numéro de téléphone.
QLineEdit
nommé 'chiffre' pour entrer un chiffre.
QLineEdit
nommé 'numero' pour entrer un numéro de 8 chiffres.
Enregistrez le fichier avec l'extension .ui
, par exemple deviner_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 |
from PyQt5.uic import loadUi from PyQt5 import QtCore, QtGui from PyQt5.QtWidgets import * from PyQt5 import QtCore, QtGui, QtWidgets import random app = QApplication([]) windows = loadUi ("deviner_telephone-interface.ui") telephone=random.randrange(10000000, 99999999) global ch ch='22886281' telephone=22886281 def tester_chiffre() : ch1='________' chiffre = windows.chiffre.text() windows.msg.clear() if len(chiffre)==1: if '0'<=chiffre<='9' : for i in range(len(ch)) : if (ch[i]==chiffre) : temp = list(ch1) temp[i] = chiffre ch1=''.join(temp) windows.msg.setText('Le numéro de téléphone est '+ch1) else: windows.msg.setText('Veuillez saisir un seul chiffre') else: windows.msg.setText('Veuillez saisir un seul chiffre') def tester_numero(): numero_propose = int(windows.numero.text()) windows.msg.clear() if (numero_propose==telephone): windows.msg.setText('Bravo! vous avez gagné') else: windows.msg.setText('Désolé vous avez perdu'); windows.verifier_chiffre_bt.clicked.connect(tester_chiffre) windows.verifier_numero_bt.clicked.connect(tester_numero) 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