Soit T un tableau de N chaînes de caractères non vides et dont la taille maximale est 5 caractères.
On se propose d’écrire un programme Python permettant :
- de remplir le tableau T par N chaînes (2<=N<=30) - éliminer de chaque élément du tableau tous les caractères non alphabétiques - convertir toutes les chaînes non vides en majuscule - afficher toutes les chaînes non vides palindromes N.B : une chaine est dite palindrome si elle se lit de la même façon de gauche à droite et de droite à gauche. Exemples : AZZA,RADAR,AA,Z. Exemple : Si N=5 et les éléments de T sont :
A54a | 15aZ | Radar | 2009 | H ? |
Le tableau après l’étape 2 contiendra les chaînes suivantes
Aa | AZ | Radar | H |
Le tableau après l’étape 3 contiendra les chaînes suivantes
AA | AZ | RADAR | H |
Le programme affichera : AA RADAR H
Voici le principe de l'algorithme pour accomplir les différentes tâches demandées :
1. Remplir le tableau T avec N chaînes :
Demander à l'utilisateur d'entrer un nombre N (2 <= N <= 30). Créer un tableau T de taille N.
Pour chaque indice de 0 à N−1, demander à l'utilisateur de saisir une chaîne de caractères.
Stocker cette chaîne dans le tableau T[i].
2. Éliminer tous les caractères non alphabétiques :
Parcourir chaque élément du tableau T.
Pour chaque chaîne, créer une nouvelle chaîne ne contenant que les caractères alphabétiques (de A à Z et de a à z).
Remplacer la chaîne initiale par cette nouvelle chaîne filtrée.
3. Convertir toutes les chaînes non vides en majuscules :
Parcourir à nouveau chaque élément du tableau T.
Pour chaque chaîne non vide, convertir tous les caractères en majuscules.
4. Afficher toutes les chaînes non vides qui sont des palindromes :
Parcourir le tableau T.
Pour chaque chaîne, vérifier si elle est un palindrome. Pour cela, comparer la chaîne avec son inverse.
Si la chaîne est un palindrome, l'afficher.
Dans cet algorithme, On va utiliser 3 fonctions et 2 procédures :
Algorithme du programme principal
1 2 3 4 5 6 7 8 9 |
Algorithme eliminer_tableau Debut n<-saisie() Ecrire('remplissage du tableau t') remplir(t,n) eliminer_majus(t,n) Ecrire('Les mots palindrome: ') recherche_palindrome(t,n) Fin |
Déclaration des objets
Objet | Type / Nature |
n | entier |
t | tableau de 30 entiers |
La fonction saisie
Cette fonction retourne un entier n entre 4 et 10 saisi par l'utilisateur.
1 2 3 4 5 6 7 8 9 10 |
foncttion saisie() Début Ecrire('donner un entier entre 2 et 30') lire (n) Tant que n<2 ou n>30 faire Ecrire('donner un entier entre 2 et 30') lire (n) Fin tant que retourner n Fin |
Déclaration des objets
Objet | Type / Nature |
n | entier |
La procédure remplir
Cette procédure remplit le tableau t de n entiers.
1 2 3 4 5 6 7 8 9 10 11 |
Procédure remplir(@t:Tab,n:entier) Début Pour i de 0 à n-1 faire Ecrire("donner une chaine dont sa longueur<=5 pour elt N°",i,": ") lire(t[i]) Tant que (long(t[i])=0) ou (long(t[i])>5) faire Ecrire("donner une chaine dont sa longueur<=5 pour elt N°",i,": ") lire(t[i]) Fin tant que Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
i | entier |
La fonction eliminer_majus
Cette procédure élimine tous les caractères non alphabétiques et convertit tous les caractères en majuscules.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Fonction eliminer_majus(@t:tab,n:entier) Début Pour i de 0 à n-1 faire j<-0 ch<-t[i] t[i]<-'' Tant que j<=long(ch)-1 faire Si 'A'<=Majus(ch[j])<='Z' alors t[i]<-t[i]+Majus(ch[j]) j<-j+1 Fin si Fin tant que Fin |
Déclaration des objets
Objet | Type / Nature |
i | entier |
j | entier |
ch | chaîne des caractères |
La fonction test_palindrome
Cette fonction vérifier si la chaîne des caractères est un palindrome
1 2 3 4 5 6 7 8 |
Fonction test_palindrome(ch:chaine) Début i<-0 Tant que (ch[i]=ch[long(ch)-i-1]) et (i<long(ch) div 2) faire i<-i+1 Fin tant que retourner (ch[i]=ch[len(ch)-i-1]) Finin |
Déclaration des objets
Objet | Type / Nature |
i | entier |
La procédure recherche_palindrome
Cette procédure recherche et affiche les mots se trouvant dans le tableau.
1 2 3 4 5 6 7 8 |
Procédure recherche_palindrome(t:Tab,n:entier) Début Pour i de 0 à n-1 faire Si (long(t[i])>0) et (test_palindrome(t[i])) alors Ecrire(t[i]) Fin si 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 |
from numpy import array t=array([str]*30) def saisie_taille() : n=int(input("donner un entier entre 2 et 30 ")) while(2>n) or (n>30) : n=int(input("donner un entier entre 2 et 30 ")) return n def remplir(t,n): for i in range (n) : t[i]=input("donner une chaine dont sa longueur<=5 pour elt N°"+str(i)+": ") while ('0'==len(t[i])) or (len(t[i])>5) : t[i]=input("donner une chaine dont sa longueur<=5 pour elt N°"+str(i)+": ") def eliminer_majus(t,n): for i in range(n) : j=0 ch=t[i] t[i]='' while j<=len(ch)-1: if 'A'<=ch[j].upper()<='Z' : t[i]=t[i]+ch[j].upper() j=j+1 def test_palindrome(ch): i=0 while (ch[i]==ch[len(ch)-i-1]) and (i<len(ch)//2): i=i+1 return (ch[i]==ch[len(ch)-i-1]); def recherche_palindrome(t,n): for i in range(n): if (len(t[i])>0) and (test_palindrome(t[i])) : print(t[i]) # programme principal n=saisie_taille() print('remplissage du tableau t') remplir(t,n) eliminer_majus(t,n) print('Les mots palindrome: ') recherche_palindrome(t,n) |
Exécution du programme
Pour remplir un tableau des caractères à partir d'une chaîne de caractères en Python, vous pouvez suivre les étapes suivantes :
1- Découper la chaîne de caractères en des caractères.
2- Ajouter chaque caractère au tableau.
Pour créer une application en Python pour éliminer de chaque élément du tableau tous les caractères non alphabétiques, convertir toutes les chaînes non vides en majuscule et afficher toutes les chaînes non vides palindromes, on suit 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 des caractères pour le tableau t.
QPushButton
nommé 'remplir_bt' pour exécuter le module createTab afin de remplir le tableau à partir de la chaine 'ch'.
QPushButton
nommé 'palindrome_bt' pour exécuter le module recherche_palindrome.
QLabel
nommé 'msg' pour afficher un message d'erreur si ch est vide ou ne contient pas des lettres minuscules.
QLabel
nommé 'liste' pour afficher les mots palindromes.
QLabel
nommé 'tablabel' pour afficher les éléments du tableau.
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 |
from PyQt5.uic import loadUi from PyQt5 import QtCore, QtGui from PyQt5.QtWidgets import * from PyQt5 import QtCore, QtGui, QtWidgets from numpy import array t=array([str]*30) 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 # Procedure qui remplit un tableau par des entiers a partir d'une chaine des caractère def createTab(): windows.tab_label.clear() ch = windows.ch.text() global n # pour la taille du 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=-1 j=-1 ch1='' # parcourir les caracteres de la chaine while (i<len(ch)-1): i=i+1 if (ch[i]==' ') : j=j+1 t[j]=ch1 ch1='' elif (i==len(ch)-1): ch1=ch1+ch[i] j=j+1 t[j]=ch1 else: ch1=ch1+ch[i] if 1<=j<=30 : i=0 while (i<j) and (1<=len(t[i])<=5): i=i+1 if (1<=len(t[i])<=5): n=j+1 tab='' for k in range (j+1) : tab=tab+ 't['+str(k)+']= '+ str(t[k])+ '\n' #afficher les elements du tableau windows.tab_label.setText(tab) else : windows.msg.setText("la taille de la chaîne n'est pas entre 1 et 5") else : windows.msg.setText("la taille du tableau n'est pas entre 2 et 30") def eliminer_majus(t,n): for i in range(n) : j=0 ch=t[i] t[i]='' while j<=len(ch)-1: if 'A'<=ch[j].upper()<='Z' : t[i]=t[i]+ch[j].upper() j=j+1 def test_palindrome(ch): i=0 while (ch[i]==ch[len(ch)-i-1]) and (i<len(ch)//2): i=i+1 return (ch[i]==ch[len(ch)-i-1]); def recherche_palindrome(): eliminer_majus(t,n) liste='' for i in range(n): if (len(t[i])>0) and (test_palindrome(t[i])) : print(t[i]) liste=liste+t[i]+' ' windows.liste.setText(liste) windows.remplir_bt.clicked.connect ( createTab ) windows.palindrome_bt.clicked.connect ( recherche_palindrome ) 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