L’examen d’un patient par son médecin commence par la collecte des symptômes à travers un ensemble de questions posées. Chaque symptôme sert à l’identification des maladies possibles et aide le médecin à prendre sa décision.
Pour l’aider à déterminer et à afficher les maladies correspondantes à un symptôme donné, on se propose d’écrire un programme qui permet de :
1- remplir un tableau M, par les noms de N maladies (2<=N<=100) où le nom d’une maladie est une chaîne formée par des caractères alphabétiques majuscules et peut contenir des espaces. 2- remplir un tableau S par N chaînes, représentant chacune, les principaux symptômes de la maladie M[i] séparés par des "#". Le dernier symptôme ne sera pas suivi du caractère "#". Un symptôme est une chaîne formée par des caractères alphabétiques majuscules et peut contenir des espaces. 3- afficher les maladies probables, pour un symptôme donné. Exemple : Tableau des maladie M :
INSUFFISANCE RENALE |
SPONDYLITE | TUBERCULOSE | ANEMIE | NEVRALGIE |
Tableau des symptômes S :
FATIGUE #PERTE APPETIT |
DOULEUR VERTEBRALE# DOULEUR THORACIQUE# PERTE APPETIT #INFLAMMATION OCCULAIRE |
SUEUR# TOUX# DOULEUR POITRINE #DOULEUR VERTEBRALE #PERTE APPETIT |
PERTE APPETIT# FATIGUE#MAUX DE TETE |
PARALYSIE# DOULEUR |
Pour le symptôme = "DOULEUR VERTEBRALE"
Les maladies probables sont : SPONDYLITE et TUBERCULOSE
Dans cet algorithme, On va utiliser quatre fonctions et deux procédures:
Algorithme du programme Principal
1 2 3 4 5 6 7 |
Algorithme maldie_symptome Debut n<-saisie_taille() remplir_maladies_symptomes(m,s,n) symptome<-saisie_symptome() recherche_maladies(m,s,n,symptome) Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
m | tableaux des chaînes des caractères |
s | tableaux des chaînes des caractères |
n | entier |
La fonction saisie_taille
Cette fonction saisit la taille des deux tableaux m et r des entre 3 et 100.
1 2 3 4 5 6 7 8 9 10 |
fonction saisie_taille():entier Début Ecrire('donner la taille du tableau entre 3 et 100: ') Lire(n) Tant que n<5 ou n>10 faire Ecrire('donner la taille du tableau entre 3 et 100: ') Lire(n) Fin tant que retourner n Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
n | entier |
La fonction verif_maladie
Cette fonction vérifie que le nom d’une maladie est une chaîne formée par des caractères alphabétiques majuscules et peut contenir des espaces.
1 2 3 4 5 6 7 8 9 |
fonction verif_maladie(ch:chaine):booleen Début i=0 # verifier si la chaine est forme uniquement des majuscules et des espaces Tant que (i<long(ch)-1) et (('A'<=ch[i]<='Z') ou ch[i]==' ') faire i<-i+1 Fin tant que retourner (('A'<=ch[i]<='Z') ou ch[i]==' ') Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La fonction verif_symptome
Cette fonction vérifie que le symptôme est une chaîne formée par des caractères alphabétiques majuscules et peut contenir des espaces et des '#' sauf le dernier caractère.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
fonction verif_symptome(ch:chaine):booleen Début # Le 1er caractère et le dernier caractère doivent differente de '#' Si (ch[0]!='#' et ch[long(ch)-1]!='#') alors i<-0 # verifier si la chaine est forme uniquement des majuscules, # et des espaces Tant que (i<long(ch)-1) et (('A'<=ch[i]<='Z') ou (ch[i]==' ') ou (ch[i]=='#')): i<-i+1 Fin tant que retourner (('A'<=ch[i]<='Z') ou (ch[i]==' ') ou (ch[i]=='#')) Sinon retourner Faux Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La procédure remplir_maladies_symptomes
Cette procédure remplit le tableau M des maladies et le tableau S des symptômes.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
procedure remplir_maladies_symptomes(@m:tab;@s:tab,n:entier) Début Pour i de 0 à n-1 faire Ecire("donner maladie N°"+i+" forme des majuscules et des espaces: ") Lire(m[i]) Tant que (verif_maladie(m[i])=Faux) alors Ecire("donner maladie N°"+i+" forme des majuscules et des espaces: ") Lire(m[i]) Fin tant que Ecrire("donner symptome pour maladie N°"+i+" forme des majuscules, # et des espaces: ") Lire(s[i]) Tant que (verif_symptome(s[i])=Faux) alors Ecrire("donner symptome pour maladie N°"+i+" forme des majuscules, # et des espaces: ") Lire(s[i]) Fin tant que Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La fonction saisie_symptome
Cette fonction saisit un symptôme formé uniquement des majuscules et/ou des espaces
1 2 3 4 5 6 7 8 9 10 |
fonction saisie_symptome():chaine Début Ecrire("donner votre symptome forme des majuscules et/ou des espaces: ") Lire(symptome) Tant que (verif_maladie(symptome)=Faux) faire Ecrire("donner votre symptome forme des majuscules et/ou des espaces: ") Lire(symptome) Fin tant que retourner symptome Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
symptome | chaîne des caractères |
La procédure recherche_maladies
Cette procédure recherche et affiche les maladies qui correspondent à une symptôme donné.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
procedure recherche_maladies(m:tab;s:tab;n:entier;symptome:entier) Début liste_maladies<-'' Pour i de 0 à n-1 faire # Si la symptome se trouve dans la liste des symptomes de la maladie Si Pos(s[i],symptome) >=0 alors liste_maladies<-liste_maladies+m[i]+', ' Fin si Fin pour Si liste_maladies!='' alors Ecrire ('Les maladies probables sont: '+liste_maladies) Sinon Ecrire("On n 'a pas trouve des maladies pour votre symptome") Fin si Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
liste_maladies | chaîne des caractères |
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 |
from numpy import array m=array([str]*100) # declaration du tableau pour les maladies s=array([str]*100) # declaration du tableau pour les symptomes def saisie_taille(): n=int(input("donner le nombre de maladies entre 3 et 100: ")) while (n<3) or (n>100): n=int(input("donner le nombre de maladies entre 3 et 100: ")) return n def verif_maladie(ch): i=0 # verifier si la chaine est forme uniquement des majuscules et des espaces while (i<len(ch)-1) and (('A'<=ch[i]<='Z') or ch[i]==' '): i=i+1 return (('A'<=ch[i]<='Z') or ch[i]==' ') def verif_symptome(ch): # Le 1er caractère et le dernier caractère doivent differente de '#' if (ch[0]!='#' and ch[len(ch)-1]!='#') : i=0 # verifier si la chaine est forme uniquement des majuscules, # et des espaces while (i<len(ch)-1) and (('A'<=ch[i]<='Z') or (ch[i]==' ') or (ch[i]=='#')): i=i+1 return (('A'<=ch[i]<='Z') or (ch[i]==' ') or (ch[i]=='#')) else: return False def remplir_maladies_symptomes(m,s,n): # remplir les deux tableaux des questions for i in range (n) : m[i]=input("donner maladie N°"+str(i)+" forme des majuscules et des espaces: ") while (verif_maladie(m[i])==False): m[i]=input("donner maladie N°"+str(i)+" forme des majuscules et des espaces: ") s[i]=input("donner symptome pour maladie N°"+str(i)+" forme des majuscules, # et des espaces: ") while (verif_symptome(s[i])==False): s[i]=input("donner symptome pour maladie N°"+str(i)+" forme des majuscules, # et des espaces: ") def saisie_symptome(): symptome=input("donner votre symptome forme des majuscules et des espaces: ") while (verif_maladie(symptome)==False): symptome=input("donner votre symptome forme des majuscules et des espaces: ") return symptome def recherche_maladies(m,s,n,symptome): liste_maladies='' for i in range (n) : if s[i].find(symptome)>=0 : liste_maladies=liste_maladies+m[i]+', ' if liste_maladies!='': print('Les maladies probables sont: '+liste_maladies) else: print("On n 'a pas trouve des maladies pour votre symptome") #programme principal n=saisie_taille() remplir_maladies_symptomes(m,s,n) symptome=saisie_symptome() recherche_maladies(m,s,n,symptome) |
Exécution du programme
Pour créer une application en Python et Designer QT qui réalise un examen avec des questions et réponses, 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é 'ch1' pour entrer les noms des maladies.
QLineEdit
nommé 'ch2' pour entrer les noms des symptômes.
QPushButton
nommé 'remplirm_bt' pour mettre les maladies dans le tableau M.
QPushButton
nommé 'remplirs_bt' pour mettre les symptômes dans le tableau S.
QPushButton
nommé 'afficher_bt' pour rechercher les maladies.
QLabel
nommé 'msg' pour afficher des messages d'erreur.
QLabel
nommé 'tabm_label' pour afficher les maladies du tableau M.
QLabel
nommé 'tabs_label' pour afficher les symptômes du tableau S.
QLabel
nommé 'resultat' pour afficher les maladies qui correspondent à une symptôme donné
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 |
from PyQt5.uic import loadUi from PyQt5 import QtCore, QtGui from PyQt5.QtWidgets import * from PyQt5 import QtCore, QtGui, QtWidgets from numpy import array m=array([str]*30) # declaration du tableau des maladies s=array([str]*30) # declaration du tableau des symptomes 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 des adherents a partir d'une chaine des caractères def createTabM(): windows.tabm_label.clear() windows.msg.clear() global n #pour la taile des tableaux ch = windows.ch1.text() 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='' # parcourir les caracteres de la chaine CH1 while (i<len(ch)) and (('A'<=ch[i]<='Z') or ch[i]==' ') : if ('A'<=ch[i]<='Z'): ch1=ch1+ch[i] if ((ch[i]==' ') or (i==len(ch)-1)) : # remplir le tableau M par les noms des maladies m[j]=ch1 ch1='' j=j+1 i=i+1 if (i==len(ch)): if 2<=j<=100: n=j # pour la taille des deux tableaux tab='' for k in range (j) : tab=tab+ 'm['+str(k)+']= '+m[k]+ '\n' #afficher les elements du tableau windows.tabm_label.setText(tab) else: windows.msg.setText("la taille du tableau doit etre entre 2 et 100") else: windows.msg.setText("donner les noms des maladies forme des majuscules") # Procedure qui remplit un tableau des commenatires a partir d'une chaine des caractères def createTabS(): windows.tabts_label.clear() windows.msg.clear() ch = windows.ch2.text() 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='' # parcourir les caracteres de la chaine CH2 while(i<len(ch)) and (('A'<=ch[i]<='Z') or (ch[i]==' ') or (ch[i]=='#')) : if (ch[i]!=' '): ch1=ch1+ch[i] if ((ch[i]==' ') or (i==len(ch)-1)) : # remplir le tableau r par des réponses VRAI ou FAUx s[j]=ch1 ch1='' j=j+1 i=i+1 if (i==len(ch)): if j==n: #la taille du tableau s doit etre egal a la taille du tableau m tab='' for k in range (j) : tab=tab+ 's['+str(k)+']= '+s[k]+ '\n' #afficher les elements du tableau windows.tabts_label.setText(tab) else: windows.msg.setText("la taille du tableau S doit etre egal a "+str(n)) else: windows.msg.setText("symptomes doivent etre forme des majuscules, # et des espaces: ") def recherche_maladies(): symptome = windows.symptome.text() symptome.find('#') liste_maladies='' for i in range (n) : if s[i].find(symptome)>=0 : liste_maladies=liste_maladies+m[i]+', ' if liste_maladies!='': resultat='Les maladies probables sont: '+liste_maladies else: resultat="On n 'a pas trouve des maladies pour votre symptome" windows.resultat.setText(resultat) windows.remplirm_bt.clicked.connect ( createTabM ) windows.remplirs_bt.clicked.connect ( createTabS ) windows.afficher_bt.clicked.connect ( recherche_maladies ) windows.show() app.exec_() |
Exécution du programme
1) Remplissage du tableau M des maladies
2) Remplissage du tableau S des symptômes
3) Afficher les maladies qui correspondent à un symptôme donné
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