IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Town Ground

Moteur de QCM (Questionnaires à Choix Multiple) sous Python.

Noter ce billet
par , 04/02/2021 à 01h54 (2336 Affichages)
Je reviens ici avec la version revue et corrigée de ce gestionnaire de QCM (Questionnaire à Choix Multiple). D'abord s'il est vrai qu'il ne peut être utilisé pour attribuer des points en fonction des réponses choisies (comme examen donc) du fait même que le questionnaire se trouve dans un fichier texte non chiffré; il peut néanmoins servir non-seulement comme jeu mais aussi comme entraînement préparatoire à un examen quelconque (allant du permis théorique de conduire, aux sujets de médecine).

Il est composé de deux parties. Le "Moteur" et le questionnaire proprement dit.

Le code-source sera étudié en fin d'article car il mérite des explications.

Si on lit bien ce programme, on découvre que le questionnaire contient à la fois les questions, les choix, et les réponses adéquates à chaque choix. Par ailleurs on découvre également qu'il contient des lignes de méta-texte (ou commandes hypertexte). Deux principalement et même exclusivement: "final\n" ("final" et son retour à la ligne) et un nombre entier situé juste après le "final\n" de chaque liste de choix indiquant quel est le nombre de choix maximum. On peut donc considérer cela également comme un "mini-code-source".

Bon j'ai difficile à expliquer. Mais si on télécharge le dossier .zip comprenant le programme QCM.py et les deux mêmes questionnaires, l'un à retour à la ligne UNIX/LINUX (questionnaire01U), l'autre Windows (questionnaire01W), mais tous deux devant être obligatoirement au format UTF-8 (pour les accents et les ç) on pourra se faire une idée.

J'ai mis les deux questionnaires de rentrée de lignes différents afin de prouver que quelque soit l'OS sur lesquels ils ont été écrits via éditeur de texte simple (ici Mousepad), du moment que c'est en UTF-8 le tout fonctionne sur n'importe quel autre OS.

Bref, dossier ici: QCM.zip

Pour plus de facilité, une fois extrait, se placer dans le répertoire QCM avant de lancer QCM.py afin de faciliter l'entrée du nom de fichier (le nom de fichier contenant le questionnaire). Cela évitera de devoir entrer un nom de chemin qui est au format Linux et que l'on n'est pas habitué à ce format.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
# -*- coding:utf-8 -*-

#Moteur de dialogue QCM
#Version 1.0
#Par Town Ground, anciennement Igor Gorovitch


def repondre(c,e):
    ch=c
    ending=e
    o=1
    while o<ch:
        txt=f.readline()
        if txt=="final\n":
            o=o+1
    while o==ch:
        txt=f.readline()
        if txt!="final\n":
            print(txt,end="")
        else:
            o=o+1
            break
    while o<=ending:
        txt=f.readline()
        if txt=="final\n":
            o=o+1


def courir():
    while 1:
        txt=f.readline()
        if txt=="":
            zz="finfichier"
            break
        elif txt!="final\n":
            print(txt,end="")
        elif txt=="final\n":
            print("")
            nombrechoix=int(f.readline())
            choix=int(input("""Votre choix ? """))
            if choix<1 or choix>nombrechoix:
                zz="abandon"
                break
            print("")
            repondre(choix,nombrechoix)
            print("")
    return(zz)


print("""Entrez le nom du fichier de questionnaire,
en cas d'erreur c'est que le fichier n'existe pas,
est mal orthographié ou se trouve dans un autre répertoire""")
print("")
fichier=input("Nom :")
f=open(fichier,"r",encoding="Utf8")
print("")
zzz=courir()
f.close()
if zzz=="abandon":
    print("""Dommage vous avez fait une mauvaise entrée,
nous sommes obligés de nous quitter...""")
if zzz=="finfichier":
    print("""Et c'est déjà la fin de notre bel entretient.""")
r=input()
Première remarque, comme on peut le voir il s'agit bien de la lecture d'un fichier texte classique, au format UTF-8, un fichier séquentiel donc.

En effet: dans la base du programme on trouve l'instruction
f=open(fichier,"r",encoding="Utf8")
. Cela permet donc d'écrire le fichier-questionnaire depuis un éditeur de texte simple (Mousepad, Bloc-Notes, autres). Je mettrai des recommandations sur le fichier par après.

Ensuite, la lecture se lance par non pas une procédure simple mais une procédure renvoyant une valeur (ou fonction). Ainsi la ligne
zzz=courir()
. Cela place dans la variable zzz la raison de l'arrêt du processus de lecture. Soit une mauvaise entrée ("abandon") soit la fin du fichier ("finfichier").

On notera juste une commande print(txt) assez spéciale:
print(txt,end="")
. En effet, le txt est attribué à f.readline(), donc txt contient la ligne de texte en cours plus le retour de ligne, la procédure print() renvoyant à son tour un retour de ligne il convenait pour obtenir un interligne simple et non un interligne double de bien ajouter cette option end="".

Et c'est pourquoi également, la variable txt contenant et le texte et le retour à la ligne il convient de tester
if txt=="final\n"
et pas uniquement un simple if txt=="final" qui se révélerait systématiquement faux!

Recommandations pour le fichier-questionnaire texte:

Pour que cela fonctionne tous OS (Systèmes d'exploitations) et tous écrans, on se limitera à 79 caractères par ligne. On choisira également de préférence si c'est possible des entrées de lignes au format "MS-DOS / Windows". Quoiqu'il en soit il faudra enregistrer le fichier absolument en UTF-8.

Si l'on souhaite rajouter un mot d'au revoir à la fin de la dernière question, on terminera ce texte de fin sans mettre de ligne "final", on l'arrêtera net après ce texte d'au-revoir.

Envoyer le billet « Moteur de QCM (Questionnaires à Choix Multiple) sous Python. » dans le blog Viadeo Envoyer le billet « Moteur de QCM (Questionnaires à Choix Multiple) sous Python. » dans le blog Twitter Envoyer le billet « Moteur de QCM (Questionnaires à Choix Multiple) sous Python. » dans le blog Google Envoyer le billet « Moteur de QCM (Questionnaires à Choix Multiple) sous Python. » dans le blog Facebook Envoyer le billet « Moteur de QCM (Questionnaires à Choix Multiple) sous Python. » dans le blog Digg Envoyer le billet « Moteur de QCM (Questionnaires à Choix Multiple) sous Python. » dans le blog Delicious Envoyer le billet « Moteur de QCM (Questionnaires à Choix Multiple) sous Python. » dans le blog MySpace Envoyer le billet « Moteur de QCM (Questionnaires à Choix Multiple) sous Python. » dans le blog Yahoo

Mis à jour 09/02/2021 à 03h54 par Town Ground

Catégories
Programmation , Python

Commentaires