Un client collectionne les images qu'il trouve dans les paquets de ses biscuits préférés pour gagner des passes d’entrées gratuites, à un parc d’attraction. La collection doit comporter 20 images différentes relatives à des personnages distincts de bandes dessinées.
On suppose que les images ont été disposées au hasard dans les paquets et que :
- chaque paquet contient exactement une image de personnages de bandes dessinées,
- un même personnage peut se retrouver dans plusieurs paquets.
Pour gagner ce voyage, le client achète une boîte contenant 10.
On va utiliser un tableau nommé P contenant la collection des personnages distincts que le client a pu collectionner, suite à l’ouverture des 10 paquets achetés, et C, le nombre d’éléments de P.
Ecrire un programme Python qui permet de :
1- valider les noms des personnage qui doit être non vide, commencer par une majuscule et être formée uniquement de lettres non accentuées.
2- vérifier l’existence du nom d'un personnage dans le tableau P.
3- prendre en considération la possibilité de trouver 5 personnages distincts avant même de terminer l’ouverture des 10 paquets,
4- afficher le nombre de personnages manquants pour gagner dans le cas ou le client n’a pas réussi à collectionner 5 personnages.
Exemple 1 : Le client gagne le concours
Exemple 2 : Le client perd le concours
Dans cet algorithme, On va utiliser trois fonctions et trois procédures:
Algorithme du programme Principal
1 2 3 4 |
Algorithme adherents_commentaires Debut remplir(p) Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
p | tableaux des chaînes |
La fonction verif_chaine
Cette fonction vérifie si une chaîne commence par une majuscule et formée uniquement de lettres non accentuées.
1 2 3 4 5 6 7 8 9 10 11 |
fonction verif_chaine(ch:chaîne):booleen Début Si 'A'<=ch[0]<='Z' alors # si la chaine commence par une lettre majuscule i<-1 Tant que(i<long(ch)-1) et ('A'<=Majus(ch[i])<='Z'): # si la chaine est forme uniquement des lettres i<-i+1 retourner ('A'<=Majus(ch[i])<='Z') sinon retourner Faux Fin si Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La fonction verif_unicite
Cette fonction vérifie si un nom de personnage saisi par l'utilisateur existe déjà dans le tableau p.
1 2 3 4 5 6 7 8 |
fonction verif_unicite(t:tab,i:entier):booleen Début j<-0 Tant que t[j]!=t[i] et j<i-1 faire j<-j+1 Fin tant que retourner t[j]!=t[i] Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
j | entier |
La procédure remplir
Cette procédure permet de :
1- remplir le tableau p par des noms de personnage
2- compter le nombre des noms des personnages distinctes trouvés
3- afficher le message 'vous avez gagné', si on dépasse 5 personnages.
4- afficher le nombre de personnages manquants pour gagner dans le cas contraire
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 |
procedure remplir_nom(@t:tab) Début i<-1 nbr_trouve<-1 #saisi du premier element du tableau Ecrire("donner nom N°0 commencant par une lettre majuscule et forme des lettres: ") Tant que verif_chaine(t[0])=Faux faire Ecrire("donner nom N°0 commencant par une lettre majuscule et forme des lettres: ") Lire(t[0]) Fin tant que Tant que (i<10) et (nbr_trouve<5) faire Ecrire("donner nom N°"+i+" commencant par une lettre majuscule et forme des lettres: ") Lire(t[i]) Tant que verif_chaine(t[i])=Faux faire Ecrire("donner nom N°"+i+" commencant par une lettre majuscule et forme des lettres: ") Lire(t[i]) Fin tant que Si (verif_unicite(t,i)) alors # verifier que le nom saisi n'existe pas dans le tableau nbr_trouve<-nbr_trouve+1 Fin si i=i+1 # incrementer le nombre des paquets a ouvrir Fin tant que Si nbr_trouve=5 alors Ecrire('vous avez gagne') Sinon Ecrire('vous avez perdu, il vous manque '+str(5-nbr_trouve)+' personnages pour gagner le concours !' ) Fin si Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | 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 |
from numpy import array p=array([str]*60) # declaration du tableau des noms des personnages def verif_chaine(ch): if 'A'<=ch[0]<='Z': i=1 while(i<len(ch)-1) and ('A'<=ch[i].upper()<='Z'): i=i+1 return ('A'<=ch[i].upper()<='Z') else: return False def verif_unicite(t,i): j=0 while t[j]!=t[i] and j<i-1: j=j+1 return t[j]!=t[i] def remplir(t): i=1 nbr_trouve=1 t[0]=input("donner nom N°0 commencant par une lettre majuscule et forme des lettres: ") while verif_chaine(t[0])==False : t[0]=input("donner nom N°0 commencant par une lettre majuscule et forme des lettres: ") while (i<10) and (nbr_trouve<5): t[i]=input("donner nom N°"+str(i)+" commencant par une lettre majuscule et forme des lettres: ") while verif_chaine(t[i])==False : t[i]=input("donner nom N°"+str(i)+" commencant par une lettre majuscule et forme des lettres: ") if (verif_unicite(t,i)): nbr_trouve=nbr_trouve+1 i=i+1 if nbr_trouve==5: print('vous avez gagne') else: print('vous avez perdu, il vous manque '+str(5-nbr_trouve)+' personnages pour gagner le concours !' ) #programme principal remplir(p) |
Pour créer une application en Python et Designer QT qui réalise le jeu décrit ci dessus, on va suivre ces étapes:
a- Ouvrez Qt Designer et créez un nouveau fichier de type Main Window.
b- Ajoutez ces widgets:
QLineEdit
nommé 'ch' pour entrer les nom des personnages.
QPushButton
nommé 'remplir_bt' pour mettre les nom des personnages dans le tableau P et afficher le résultat du jeu.
QLabel
nommé 'msg' pour afficher des messages d'erreur et le résultat du jeu.
QLabel
nommé 'tabt_label' pour afficher les noms des personnages du tableau P.
Enregistrez le fichier avec l'extension .ui
, par exemple tabtab-2.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 93 94 |
from PyQt5.uic import loadUi from PyQt5 import QtCore, QtGui from PyQt5.QtWidgets import * from PyQt5 import QtCore, QtGui, QtWidgets from numpy import array p=array([str]*30) # declaration du tableau des noms des personnage app = QApplication([]) windows = loadUi ("tabtab-2.ui") # Fonction qui supprime des espaces de la chaine des carcatères def supprimer_espaces (ch) : while(ch[0]==' '): # elimnier tous les espaces au début de la chaine ch=ch[1:len(ch)] while(ch[len(ch)-1]==' '): # elimnier tous les espaces a la fin de la chaine ch=ch[0:len(ch)-1] while (ch.find(' ')>0): ch=ch.replace(" ", " ") # remplacer les doubles espaces apar un seul espace return ch def verif_unicite(t,i): j=0 while t[j]!=t[i] and j<i-1: j=j+1 return t[j]!=t[i] # Procedure qui remplit un tableau des adherents a partir d'une chaine des caractères def createTab(): windows.tabt_label.clear() windows.msg.clear() global n #pour la taile du tableau des noms ch = windows.ch.text() verif_majus=True if ch=="": windows.msg.setText("Veuillez remplir la chaîne") else: windows.msg.clear() # effacer le message d erreur ch= supprimer_espaces(ch) i=-1 j=0 ch1='' nbr_trouve=1 # parcourir les caracteres de la chaine CH1 while(i<len(ch)-1) and (verif_majus) : i=i+1 if (ch[i]!=' '): ch1=ch1+ch[i] if ((ch[i]==' ') or (i==len(ch)-1)) : # remplir le tableau par les noms des personnages p[j]=ch1 if ch1[0]<'A' or ch1[0] >'Z': verif_majus=False if j>0: if verif_unicite(p,j): nbr_trouve=nbr_trouve+1 print(str(nbr_trouve)) ch1='' j=j+1 if (i==len(ch)-1) and (verif_majus) : if j==10: n=j tab='' for k in range (j) : tab=tab+ 'p['+str(k)+']= '+p[k]+ '\n' #afficher les elements du tableau windows.tabt_label.setText(tab) if (nbr_trouve>=5): windows.msg.setText("Vous avez gagne") else: windows.msg.setText('Vous avez perdu, il vous manque '+str(5-nbr_trouve)+' personnages pour gagner le jeu !') else: windows.msg.setText("la taille du tableau a doit etre egal a 10") else: windows.msg.setText("les noms doit etre commence par une lettre majuscule et forme des lettres: ") windows.remplir_bt.clicked.connect ( createTab ) windows.show() app.exec_() |
Exécution du programme
1) Dans le cas ou le client gagne le jeu
2) Dans le cas ou le client perd le jeu
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