Dans le but d’informatiser le système de déroulement des examens, un institut de formation, décide de réaliser une application permettant à ses candidats de passer un examen à distance.
L’examen est composé de N questions (avec 5≤N≤ 10) sous forme de propositions à valider soit par VRAI si la proposition est correcte, soit par FAUX dans le cas contraire.
Pour cela, on se propose d’écrire un programme Python qui permet de :
1- remplir un tableau Q par les N questions ainsi que les N réponses correspondantes, sous le format Question#Réponse sachant que :
Question désigne la proposition à Elle est formée d’au moins quatre caractères et commence par une majuscule.
Réponse est une chaine majuscule qui représente la réponse à la question. Elle doit être VRAI si la proposition est correcte et FAUX dans le cas contraire.
2- remplir un tableau R par les N réponses fournies par un candidat, sachant que R[i] est une chaine majuscule qui représente la réponse du candidat à la question Q[i]. Elle doit être VRAI ou FAUX.
3- afficher :
a) le nombre total de points obtenus par ce candidat, sachant que, pour chaque réponse correcte, on ajoute 2 au total, sinon on retranche 2.
b) Le taux de réussite calculé comme suit : Taux réussite = (nombre de réponses correctes / N) *100 Exemple :
Pour N=5, et les deux tableaux Q et R suivants :
Q | WAN est un réseau local #FAUX | Pascal est un langage compilé#VRAI | ROM est une mémoire morte#VRAI | Octet est la plus petite unité de mesure de capacité des supports de stockage#FAUX | http est un protocole d’échange de données#FAUX |
0 | 1 | 2 | 3 | 4 | |
R | FAUX | VRAI | VRAI | VRAI | FAUX |
0 | 1 | 2 | 3 | 4 |
Le programme affiche :
Le nombre total de points obtenus est : 6 Le taux de réussite est : 80%
Explications :
Nombre de réponses correctes : 4
Nombre de réponses incorrectes : 1
Donc Total de points obtenus = 4*2 + 1*(-2) = 6 Taux de réussite = (4 / 5) * 100 = 80 %
Dans cet algorithme, On va utiliser trois fonctions et deux procédures:
Algorithme du programme Principal
1 2 3 4 5 6 7 |
Algorithme QCU_examen Debut n<-saisie_taille() remplir_questions(q,n) remplir_reponses(r,n) correction(r,q,n) Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
q | tableaux des chaînes des caractères |
r | tableaux des chaînes des caractères |
n | entier |
La fonction saisie_taille
Cette fonction saisit la taille des deux tableaux q et r des entre 5 et 10.
1 2 3 4 5 6 7 8 9 10 |
fonction saisie_taille():entier Début Ecrire('donner la taille du tableau entre 5 et 10: ') Lire(n) Tant que n<5 ou n>10 faire Ecrire('donner la taille du tableau entre 5 et 10: ') Lire(n) Fin tant que retourner n Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
n | entier |
La procédure remplir_questions
Cette procédure saisit les questions sous "question#VRAI" ou "question#FAUX"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
procedure remplir_question(@q:tab1;n:entier) Début Pour i de 0 à n-1 faire Ecrire("donner question N°"+str(i)+" sous forme question#VRAI ou question#FAUX: ") Lire(q[i]) ch<-q[i] # si la question n est pas forme d'au moins 4 caracters et ne commence pas par une majuscule Tant que (long(Pos(ch,0,long(ch)-5])<4) ou (ch[0]<'A') ou( ch[0]>'Z') ou (Pos(ch,long(ch)-4,long(ch)] n'est pas dans ['VRAI','FAUX']): Ecrire("donner question N°"+str(i)+" sous forme question#VRAI ou question#FAUX: ") Lire(q[i]) ch<-q[i] Fin tant que Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
ch | chaîne des caractères |
La procédure remplir_reponses
Cette procédure saisit les réponses qui doivent être VRAI ou FAUX.
1 2 3 4 5 6 7 8 9 10 11 |
procedure remplir_reponse(@r:tab1;n:entier) Début Pour i de 0 à n-1 faire Ecrire("donner reponse de la question N°"+i+" sous forme VRAI ou FAUX: ") Lire(r[i]) Tant que (r[i] n'est pas dans ['VRAI','FAUX']) faire Ecrire("donner reponse de la question N°"+i+" sous forme VRAI ou FAUX: ") Lire(r[i]) Fin tant que Fin pour Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
La procédure correction
Cette procédure réalise ces tâches:
1- Afficher le total des points obtenus.
2- Calculer le taux de réussite comme suit : Taux de réussite = (reponses_correctes / N) * 100
3- Afficher le taux de réussite.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
procedure correction(q:tab,r:tab,n:entier) Début nbr_points<-0 nbr_reponses<-0 Pour i de 0 à n-1 faire Si Pos(q[i],r[i])>=0 alors # Si la reponse est correcte nbr_points<-nbr_points+2 nbr_reponses<-nbr_reponses+1 Sinon nbr_points<-nbr_points-2 Din si Fin pour Ecrire('Le nombre total de points obtenus est: '+nbr_points) Ecrire('Le nombre des reponses correctes est: '+nbr_reponses) Ecrire('Le nombre des reponses incorrectes est: '+n-nbr_reponses) Ecrire('Le taux de reussite est: '+(nbr_reponses/n)*100))+"%") Fin |
Déclaration des objets
Objet | Type / Nature |
---|---|
i | entier |
nbr_points | entier |
nbr_reponses | 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 |
from numpy import array q=array([str]*20) # declaration du tableau pour les questions r=array([str]*20) # declaration du tableau pour les réponses def saisie_taille(): n=int(input("donner la taille des tableaux entre 5 et 10: ")) while (n<5) or (n>10): n=int(input("donner la taille des tableaux entre 5 et 10: ")) return n def remplir_questions(q,n): # remplir les deux tableaux des questions for i in range (n) : q[i]=input("donner question N°"+str(i)+" sous forme question#VRAI ou question#FAUX: ") ch=q[i] # si la question n est pas forme d'au moins 4 caracters et ne commence pas par une majuscule while (len(ch[0:len(ch)-5])<4) or (ch[0]<'A') or( ch[0]>'Z') or (ch[len(ch)-4:len(ch)] not in ['VRAI','FAUX']): q[i]=input("donner question N°"+str(i)+" sous forme question#VRAI ou question#FAUX: ") ch=q[i] def remplir_reponses(r,n): # remplir les deux tableaux des reponses for i in range (n) : r[i]=input("donner reponse de la question N°"+str(i)+" sous forme VRAI ou FAUX: ") while (r[i] not in ['VRAI','FAUX']): r[i]=input("donner reponse de la question N°"+str(i)+" sous forme VRAI ou FAUX: ") def correction(r,q,n): nbr_points=0 nbr_reponses=0 for i in range (n) : if (q[i].find(r[i]))>=0: nbr_points=nbr_points+2 nbr_reponses=nbr_reponses+1 else: nbr_points=nbr_points-2 print('Le nombre total de points obtenus est: '+str(nbr_points)) print('Le nombre des reponses correctes est: '+str(nbr_reponses)) print('Le nombre des reponses incorrectes est: '+str(n-nbr_reponses)) print('Le taux de reussite est: '+str("{:.2f}".format((nbr_reponses/n)*100))+"%") #programme principal n=saisie_taille() remplir_questions(q,n) remplir_reponses(r,n) correction(r,q,n) |
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 questions.
QLineEdit
nommé 'ch2' pour entrer les réponses.
QPushButton
nommé 'remplirq_bt' pour mettre les questions dans le tableau G.
QPushButton
nommé 'remplirr_bt' pour mettre les réponses dans le tableau R.
QPushButton
nommé 'correction_bt' pour lancer la correction automatique des réponses.
QLabel
nommé 'msg' pour afficher des messages d'erreur.
QLabel
nommé 'tabq_label' pour afficher les questions du tableau Q.
QLabel
nommé 'tabr_label' pour afficher les réponses du tableau R.
QLabel
nommé 'resultat' pour afficher le total des points obtenus et le taux de réussite.
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 137 138 139 140 141 142 143 |
from PyQt5.uic import loadUi from PyQt5 import QtCore, QtGui from PyQt5.QtWidgets import * from PyQt5 import QtCore, QtGui, QtWidgets from numpy import array q=array([str]*30) # declaration du tableau des questions r=array([str]*30) # declaration du tableau des reponses 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 createTabQ(): windows.tabq_label.clear() windows.msg.clear() global n #pour la taile du tableau a des utilisateurs ch = windows.ch1.text() verif_question=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='' # parcourir les caracteres de la chaine CH1 while(i<len(ch)-1) and (verif_question) : i=i+1 if (ch[i]!=' '): ch1=ch1+ch[i] if ((ch[i]==' ') or (i==len(ch)-1)) : # remplir le tableau q par les questions q[j]=ch1 if (len(ch1[0:len(ch1)-5])<4) or (ch1[0]<'A') or( ch1[0]>'Z') or (ch1[len(ch1)-4:len(ch1)] not in ['VRAI','FAUX']) : verif_question=False ch1='' j=j+1 if (i==len(ch)-1) and (verif_question): if 5<=j<=10: n=j tab='' for k in range (j) : tab=tab+ 'q['+str(k)+']= '+q[k]+ '\n' #afficher les elements du tableau windows.tabq_label.setText(tab) else: windows.msg.setText("la taille du tableau a doit etre entre 5 et 10") else: windows.msg.setText("donner les questions sous forme Question#VRAI ou Question#FAUX: ") # Procedure qui remplit un tableau des commenatires a partir d'une chaine des caractères def createTabR(): windows.tabtr_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=-1 j=0 ch1='' verif_reponse=True # parcourir les caracteres de la chaine CH2 while(i<len(ch)-1) and (verif_reponse): i=i+1 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 r[j]=ch1 if ch1 not in {'VRAI','FAUX'} : verif_reponse=False ch1='' j=j+1 if (i==len(ch)-1) and (verif_reponse): if j==n: #la taille du tableau r doit etre egal a la taille du tableau q tab='' for k in range (j) : tab=tab+ 'r['+str(k)+']= '+r[k]+ '\n' #afficher les elements du tableau windows.tabtr_label.setText(tab) else: windows.msg.setText("la taille du tableau R doit etre egal a "+str(n)) else: windows.msg.setText("Les reponses doit etre sous forme VRAI ou FAUX ") def correction(): nbr_points=0 nbr_reponses=0 for i in range (n) : if (q[i].find(r[i]))>=0: nbr_points=nbr_points+2 nbr_reponses=nbr_reponses+1 elif nbr_points: nbr_points=nbr_points-2 liste='Le nombre total de points obtenus est: '+str(nbr_points)+'\n' liste=liste+'Le nombre des reponses correctes est: '+str(nbr_reponses)+'\n' liste=liste+'Le nombre des reponses incorrectes est: '+str(n-nbr_reponses)+'\n' liste=liste+'Le taux de reussite est: '+str("{:.2f}".format((nbr_reponses/n)*100)+"%")+'\n' windows.resultat.setText(liste) windows.remplirq_bt.clicked.connect ( createTabQ ) windows.remplirr_bt.clicked.connect ( createTabR ) windows.correction_bt.clicked.connect ( correction ) windows.show() app.exec_() |
Exécution du programme
1) Remplissage du tableau Q des questions
2) Remplissage du tableau R des réponses
3) Afficher le total des points obtenus et le taux de réussite
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