Soit T1 un tableau contenant des adresses E-mails sous la forme « utilisateur@serveur ». Une adresse E-mail est valide si elle vérifie les conditions suivantes :
- L’adresse ne doit pas dépasser 25 caractères
- L’adresse doit commencer par une lettre
- L’adresse doit contenir le signe « @ »
On se propose d’écrire un programme Python qui permet :
1- de remplir un tableau T1 par N adresses E-mails (avec 5≤n≤10)
2- d’extraire sans redondance, dans un 2ème tableau T2, les noms des serveurs, à partir des adresses E-mail du Tableau T1.
3- d’afficher le résultat obtenu.
Exemple : Pour le tableau T1 suivant :
raouf@yahoo.fr | amin@gmail.com | ahlem@hotmail.com | kais@gmai.com | mariem@hotmail.com | zied@edunet.tn | adem@yahoo.fr | walid@edunet.tn |
On obtient le tableau T2 suivant :
yahoo.fr | gmail.com | hotmail.com | edunet.tn |
Dans cet algorithme, On va utiliser deux fonctions et trois procédures :
Algorithme du programme principal
1 2 3 4 5 6 |
Algorithme emails_serveurs Debut n<-saisie_taille() remplir(t1,t2,n) afficher_serveurs(t2,n2) Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
n | entier |
t1 | tableau de 30 chaînes des caractères |
t2 | tableau de 30 chaînes des caractères |
La fonction saisie_taille
Cette fonction retourne la taille du tableau entre 5 et 10 saisie par l'utilisateur.
1 2 3 4 5 6 7 8 9 10 |
Fonction saisie_taille(): Début Ecrire('donner un entier entre 5 et 10') lire (n) Tant que n<5 ou n>10 faire Ecrire('donner entre entre 5 et 10') lire (n) Fin tant que retourner n Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
n | entier |
La fonction verif_generer_serveur
Cette fonction vérifie la validité de l'adresse email saisie et extrait le nom du serveur associé à cette adresse.
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 |
Fonction verif_generer_serveur(ch:chaine):booleen Début serveur<-'' # Verifier si l'adresse commence âr une lettre # et la position du symbole @ est avant du point . Si ('a'<=ch[0]<='z') et (0<Pos(ch,'@')<Pos(ch,'.')<long(ch)-1) alors i<-1 # Verifier que la premiere partie de l'adresse contient des lettres des chiffres et les carcateres spéciaux Tant que ((ch[i] dans {'_','-','.'}) ou ('a'<=ch[i]<='z') ou ('0'<=ch[i]<='9')) et (i<Pos(ch,'@')) faire i<-i+1 Fin tant que Si (i==Pos(ch,'@')) alors i<-i+1 # Verifier que la 2eme partie de l'adresse contient des lettres et un seul point Tant que ('a'<=ch[i]<='z') et (i<Pos(ch,('.')) faire serveur<-serveur+ch[i] i=i+1 Fin tant que Si (i=Pos(ch,'.')) alors serveur<-serveur+ch[i] i=i+1 # Verifier que la 3eme partie de l'adresse contient des lettres Tant que ('a'<=ch[i]<='z') et (i<long(ch)-1) faire serveur<-serveur+ch[i] i<-i+1 Fin tant que serveur<-serveur+ch[i] Si n2=0 alors t2[n2]<-serveur n2=n2+1 Sinon Si(verif_unicite(t2,n2,serveur))alors # verifier si nom du serveur existe deja dans le tableau t t2[n2]<-serveur n2<-n2+1 Finsi retourner 'a'<=ch[i]<='z' Sinon retourner Faux Fin si Sinon retourner Faux Fin si Sinon retourner Faux Fin si Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
serveur | chaîne des caractères |
n2 | entier |
La procédure remplir
Cette procédure remplit le tableau t1 par des adresses emails valides, extrait les noms des serveurs et les stockent sans redondance dans le deuxième tableau t2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Procédure remplir(@t1:Tab;@t2:Tab;n:entier) Début Pour i de 0 à n-1 faire #vider le tableau t2 pour contenir les noms des serveurs t2[i]<-'' Fin pour Pour i de 0 à n-1 faire Ecrire("donner adresse email N° "+i+" dont sa long entre 1 et 25: ") lire(t1[i]) Tant que (long(t1[i])<5) ou (long(t1[i])>25) ou (verif_generer_serveur(t1[i])=Faux) faire Ecrire("donner adresse email N° "+str(i)+" dont sa long entre 1 et 25: ") lire(t1[i]) Fin tant que Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La procédure afficher_serveurs
Cette procédure affiche les noms des serveurs extraits des adresses emails
1 2 3 4 5 6 7 |
Procedure afficher(t:Tab;n:entier) Début Ecrire ('le tableau des serveurs:') Pour i de 0 à n-1 faire Ecrire ('t2['+i+']= '+t[i]) Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La procédure affiche
Cette procédure affiche les éléments du tableau
1 2 3 4 5 6 7 |
Procédure afficher(t:Tab;n:entier) Début Ecrire('le tableau contenant les mots de passes generes') Pour i de 0 à n-1 faire Ecrire('t1['+i+']= '+t[i]) Fin pour 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 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 |
from numpy import array t1=array([str]*30) #declaration du tableau des emails t2=array([str]*30) #declaration du tableau des mots de passe n2=0 # variable globale pour la taille du tableau t2 def verif_unicite(t,i,ch): j=0 while(j<i-1) and (t[j]!=ch): j=j+1 return t[j]!=ch def verif_generer_serveur(ch): global n2 serveur='' # Verifier si l'adresse commence âr une lettre # et la position du symbole @ est avant du point . if ('a'<=ch[0]<='z') and (0<ch.find('@')<ch.find('.')<len(ch)-1): i=1 # Verifier que la premiere partie de l'adresse contient des lettres des chiffres et les carcateres spéciaux while ((ch[i] in {'_','-','.'}) or ('a'<=ch[i]<='z') or ('0'<=ch[i]<='9')) and (i<ch.find('@')): #motdepasse=motdepasse+ch[i] i=i+1 if (i==ch.find('@')): i=i+1 # Verifier que la 2eme partie de l'adresse contient des lettres et un seul point while ('a'<=ch[i]<='z') and (i<ch.find('.')): serveur=serveur+ch[i] i=i+1 if (i==ch.find('.')): serveur=serveur+ch[i] i=i+1 # Verifier que la 3eme partie de l'adresse contient des lettres while ('a'<=ch[i]<='z') and (i<len(ch)-1): serveur=serveur+ch[i] i=i+1 serveur=serveur+ch[i] if n2==0: t2[n2]=serveur n2=n2+1 else: if(verif_unicite(t2,n2,serveur)): t2[n2]=serveur n2=n2+1 return 'a'<=ch[i]<='z' else: return False else: return False else: return False def saisie_taille() : n=int(input("donner un entier entre 5 et 10: ")) while(n<1) or (n>10) : n=int(input("donner un entier entre 5 et 10: ")) return n def remplir(t1,t2,n): for i in range (n) : t2[i]='' for i in range (n) : t1[i]=input("donner adresse email N° "+str(i)+" dont sa long entre 1 et 25: ") while (len(t1[i])<5) or (len(t1[i])>25) or (verif_generer_serveur(t1[i])==False) : t1[i]=input("donner adresse email N° "+str(i)+" dont sa long entre 1 et 25: ") def afficher_serveurs(t,n): print('le tableau des serveurs:') for i in range (n) : print('t2['+str(i)+']= '+t[i]) #programme principal n=saisie_taille() remplir(t1,t2,n) afficher_serveurs(t2,n2) |
Exécution du programme
Pour créer une application en Python pour entrer des adresses emails valides et extraire les noms des serveurs correspondants 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:
QLabel
nommé 'ch' pour entrer la liste des adresses emails.
QPushButton
nommé 'remplir_bt' pour exécuter le module createTab.
QLabel
nommé 'msg' pour afficher un message d'erreur
QLabel
nommé 'tabt1_label' pour contenir les adresses emails.
QLabel
nommé 'tabt2_label' pour contenir les noms des serveurs.
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 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
from PyQt5.uic import loadUi from PyQt5 import QtCore, QtGui from PyQt5.QtWidgets import * from PyQt5 import QtCore, QtGui, QtWidgets from numpy import array t1=array([str]*30) t2=array([str]*30) n2=0 # variable globale pour la taille du tableau t2 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 n2=0 # variable globale pour la taille du tableau t2 def verif_unicite(t,i,ch): j=0 while(j<i-1) and (t[j]!=ch): j=j+1 return t[j]!=ch ''' t2[0]='gmail.com' t2[1]='yahoo.fr' t2[2]='gmail.com' print(str(verif_unicite(t2,3,'gmail.com'))) ''' def verif_generer_serveur(ch): global n2 serveur='' # Verifier si l'adresse commence âr une lettre # et la position du symbole @ est avant du point . if ('a'<=ch[0]<='z') and (0<ch.find('@')<ch.find('.')<len(ch)-1): i=1 # Verifier que la premiere partie de l'adresse contient des lettres des chiffres et les carcateres spéciaux while ((ch[i] in {'_','-','.'}) or ('a'<=ch[i]<='z') or ('0'<=ch[i]<='9')) and (i<ch.find('@')): #motdepasse=motdepasse+ch[i] i=i+1 if (i==ch.find('@')): i=i+1 # Verifier que la 2eme partie de l'adresse contient des lettres et un seul point while ('a'<=ch[i]<='z') and (i<ch.find('.')): serveur=serveur+ch[i] i=i+1 if (i==ch.find('.')): serveur=serveur+ch[i] i=i+1 # Verifier que la 3eme partie de l'adresse contient des lettres while ('a'<=ch[i]<='z') and (i<len(ch)-1): serveur=serveur+ch[i] i=i+1 serveur=serveur+ch[i] if n2==0: t2[n2]=serveur n2=n2+1 else: if(verif_unicite(t2,n2,serveur)): t2[n2]=serveur n2=n2+1 return 'a'<=ch[i]<='z' else: return False else: return False else: return False # Procedure qui remplit un tableau par des entiers a partir d'une chaine des caractère def createTab(): windows.tabt1_label.clear() windows.tabt2_label.clear() windows.msg.clear() ch = windows.ch.text() global n # pour la taille di tableau if ch=="": windows.msg.setText("Veuillez remplir la chaîne") else: windows.msg.clear() # effacer le message d erreur ch= supprimer_espaces(ch) i=0 j=0 ch1='' verif_email=True # parcourir les caracteres de la chaine while(i<len(ch)) and (verif_email) : if (ch[i]!=' '): ch1=ch1+ch[i] if ((ch[i]==' ') or (i==len(ch)-1)) : t1[j]=ch1 verif_email=verif_generer_serveur(t1[j]) ch1='' j=j+1 i=i+1 if (i<len(ch)) or (verif_email==False ) : # si la chaine contient des valeurs non numeriques windows.msg.setText("SVP saisir des emails valides") else : if 5<=j<=10: n=j tab='' for k in range (j) : tab=tab+ 't1['+str(k)+']= '+ t1[k]+ '\n' #afficher les elements du tableau windows.tabt1_label.setText(tab) tab='' for k in range (n2) : tab=tab+ 't2['+str(k)+']= '+ t2[k]+ '\n' #afficher les elements du tableau windows.tabt2_label.setText(tab) else: windows.msg.setText("le nombre des emails n'est pas entre 5 et 10") windows.remplir_bt.clicked.connect ( createTab ) 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