qcm

Faire des qcm simplement - retour accueil

git clone git://bebou.netlib.re/qcm
Log | Files | Refs | README |

commit 50ea6450b235ad832d61b88a390d3afa92ac9e32
parent 254d50a24a8b2b72f979a0049a5a5f5928445dce
Auteurice: Arthur Pons <arthur.pons@unistra.fr>
Date:   Thu,  7 Nov 2024 20:56:31 +0100

Gestion des qcm à choix multiple ou pas

Au début c'était une seule option, ensuite toutes, maintenant on peut le
régler entre une seule ou toute. Pas à travers un drapeau (je me demande
si les flags sont encore pertinents pour les attributs réglables par un
fichier).

Adaptation du fichier d'exemple et du README en conséquence.

Diffstat:
MREADME | 51+++++++++++++++++++++++++++++++++------------------
Mqcm.sh | 4+++-
Mquestions | 2++
3 files changed, 38 insertions(+), 19 deletions(-)

diff --git a/README b/README @@ -133,15 +133,21 @@ La liste des attributs : un choix multiple (A, B, C...), uniquement ces réponses seront valides. Si `options` existe il fera correspondre les options aux différentes lettres. En l'absence d'`options` `qcm` proposera 4 choix par défaut (A, B, C et D). - `ouverte` permettra n'importe quelle réponse et ignore `options`. + Malgré son nom `qcm` n'admet par défaut qu'une seule réponse possible. Voir + `choix`. `ouverte` permettra n'importe quelle réponse et ignore `options`. * `options` : la liste des réponses possibles séparées par des `~`. Il ne doit pas y avoir de `~` à la fin. Optionnel, s'il n'existe pas c'est `-n` qui décidera du nombre de réponses possibles qui sera le même pour toutes les questions. * `unique` : si une seule réponse par IP est autorisée ou pas. Optionnel, "non" - enregistera toutes les réponses, n'importe quoi d'autre (`oui` par exemple) + enregistrera toutes les réponses, n'importe quoi d'autre (`oui` par exemple) filtrera sur les IP pour ne laisser que la première réponse passer. Par défaut `unique` est à oui. + * `choix` : si la question est à choix multiple ou pas. Optionnel, "multiple" + permettra de choisir plusieurs options, n'importe quoi d'autre l'empêchera. + Par défaut les questions ne sont pas à choix multiple. Si la question est de + `type` `ouverte` cet attribut est ignoré puisqu'il n'y a pas d'options + parmi lesquelles choisir. * `demander` : n'est pas un attribut mais "enregistre" la question et la lance **Attention** : Tout attribut renseigné pour la N^ième question conservera sa @@ -155,6 +161,7 @@ Ainsi le fichier question: om, psg ou les verts options: om~psg~les verts + choix: multiple demander question: "Quels sentiments vous évoquent l'anarchie ?" @@ -169,34 +176,42 @@ Ainsi le fichier Combien font \"x+y\" ?" type: qcm options: 6~11~10~autre + choix: unique unique: oui demander question: Et x-y ? demander -Posera cinq questions en tout. La première, celle par défaut, un qcm avec -quatre choix, aucun intitulé, aucune réponse possible d'affichée (juste les -lettres). Utile si les questions et les réponses sont gérées par ailleurs. -La seconde un qcm offrant le choix entre les trois équipes de foot. Sera -par défaut à choix unique et un qcm. La troisième une question ouverte à -laquelle on peut répondre plusieurs fois. Notez les `"` pour gérer l'apostrophe -dans `l'anarchie`. La quatrième une question à choix multiples de math avec -une réponse unique. Il faut ici rappeler que c'est une qcm et que l'on ne peut -réponse qu'une seule fois puisque par défaut on hérite des attributs de la -question précédente, ouverte et à laquelle on pouvait répondre plusieurs fois. -On notera également que si l'on englobe tout dans des double-quotes on peut -sauter des lignes et que l'on peut échaper des double-quotes. La dernière est -identique à la quatrième mais l'intitulé change. - -Etant donné que tous les attributs sont optionnels le fichier suivant : +Posera cinq questions en tout. + + 1. celle par défaut, un qcm avec quatre choix, aucun intitulé, aucune réponse + possible d'affichée (juste les lettres). Par défaut ne permet de choisir + qu'une seule réponse une seule fois. Utile si les questions et les réponses + sont gérées par ailleurs. + 2. une qcm offrant le choix entre les trois équipes de foot. Il est possible + d'en choisir plusieurs à la fois. Est toujours un qcm par défaut et ne permet + de répondre qu'une seule fois. + 3. une question ouverte à laquelle on peut répondre plusieurs fois. Notez les + `"` pour gérer l'apostrophe dans `l'anarchie`. + 4. une question de type `qcm` de math dont une seule réponse est correcte et + à laquelle on ne peut répondre qu'une seule fois. Il faut ici rappeler que + c'est une qcm, que l'on ne peut répondre qu'une seule fois et qu'une seule + réponse est la bonne puisque par défaut on hérite des attributs de la + question précédente, ouverte et à laquelle on pouvait répondre plusieurs fois + ainsi que celle encore d'avant pour laquelle on pouvait choisir plusieurs + options. On notera également que si l'on englobe tout dans des `"` on peut + sauter des lignes et que l'on peut échapper des `"`. + 5. identique à la quatrième mais l'intitulé change. + +Étant donné que tous les attributs sont optionnels le fichier suivant : demander demander demander Est valide. S'il est lancé avec la commande `qcm -f ./questionnaire.qcm -n 3` -il posera trois questions sans intutilé avec trois options de réponses chacune. +il posera trois questions sans intitulé avec trois options de réponses chacune. Si l'on veut créer un questionnaire à la volée et que l'on connaît bien la syntaxe ci-dessus on peut simplement lancer `qcm -f -` et écrire les questions. diff --git a/qcm.sh b/qcm.sh @@ -49,7 +49,7 @@ demander() { [ "$type" = "ouverte" ] \ && { tail -fn0 "$logs" | stdbuf -oL grep -E "GET /$id" >> $tmpd/in & } \ - || { tail -fn0 "$logs" | stdbuf -oL grep -E "GET /$id/[$answers]+ " >> $tmpd/in & } + || { tail -fn0 "$logs" | stdbuf -oL grep -E "GET /$id/[$answers]$choix " >> $tmpd/in & } tailpid=$! while :;do @@ -82,6 +82,7 @@ refresh="${r:-1}" logs="${l:-/var/log/nginx/access.log}" file="$f" uopt="-u -k1,1" +choix= tmpd=$(mktemp -d XXX) id=$(basename "$tmpd") @@ -89,6 +90,7 @@ id=$(basename "$tmpd") alias question:=question; question() question="$*" alias type:=type; type() type="$*" alias options:=options; options() options="$*" +alias choix:=choix; choix() { [ "$*" = "multiple" ] && choix="+" || choix=; } alias unique:=unique; unique() { [ "$*" = "non" ] && uopt= || uopt="-u -k1,1"; } trap "rm -rf $tmpd;exit" INT TERM diff --git a/questions b/questions @@ -2,6 +2,7 @@ demander question: om, psg ou les verts options: om~psg~les verts +choix: multiple demander question: "Quels sentiments vous évoquent l'anarchie ?" @@ -16,6 +17,7 @@ y=7 Combien font \"x+y\" ?" type: qcm options: 6~11~10~autre +choix: unique unique: oui demander