qcm

Faire des qcm simplement - retour accueil

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

commit 8a1ee1bbeaf6a2f9479d10d73ecea9f3bebc91c7
parent 42efbe8218b53744a30ee256f73358b828bd8fda
Auteurice: Arthur Pons <arthur.pons@unistra.fr>
Date:   Fri,  8 Nov 2024 10:35:24 +0100

Ajout du type de quesiton "regex"

Peut-être qu'il ne faut pas par défaut afficher la regex.
Dans l'exemple cela rend la question inutile pour toute personne sachant
lire des regex.

Diffstat:
MREADME | 30++++++++++++++++++++----------
Mqcm.sh | 30+++++++++++++++++++-----------
Mquestions | 7++++++-
3 files changed, 45 insertions(+), 22 deletions(-)

diff --git a/README b/README @@ -138,11 +138,13 @@ La liste des attributs : `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). 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. + `choix`. `ouverte` permettra n'importe quelle réponse et ignore `options`. + `regex` permet de restreindre les réponses possibles en écrivant un + expression régulière. Dans ce cas-ci `options` renseigne l'expression. + * `options` : Si la question est de type `qcm`, `options` est la liste des + réponses possibles séparées par des `~`. Il ne doit pas y avoir de `~` à la + fin. Si la question est de type `regex`, `options` est l'expression + régulière filtrant les réponses. Optionnel. * `unique` : si une seule réponse par IP est autorisée ou pas. Optionnel. "non" 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 @@ -168,9 +170,14 @@ Ainsi le fichier choix: multiple demander + question: Donnez un exemple de nombre réel svp + type: regex + options: [0-9]*[,.][0-9]+ + unique: non + demander + question: "Quels sentiments vous évoquent l'anarchie ?" type: ouverte - unique: non demander question: "Sachant que : @@ -187,7 +194,7 @@ Ainsi le fichier question: Et x-y ? demander -Posera cinq questions en tout. +Posera six 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 @@ -196,9 +203,12 @@ Posera cinq questions en tout. 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 + 3. une question `regex` demandant un nombre réel et filtrant sur une + expression régulière ne laissant passer que les nombres réels. Une même IP + peut envoyer plusieurs réponses. + 4. 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 + 5. 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 @@ -206,7 +216,7 @@ Posera cinq questions en tout. 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. + 6. identique à la question 5 mais l'intitulé change. Étant donné que tous les attributs sont optionnels le fichier suivant : diff --git a/qcm.sh b/qcm.sh @@ -28,14 +28,18 @@ playout() { $([ -n "$question" ] && printf "%s" "$question") - $(if [ "$type" != "ouverte" ];then - [ "$choix" = "+" ] \ - && printf "%s\n" "une ou plusieurs options vraies" \ - || printf "%s\n" "une seule option vraie" - [ -n "$options" ] \ - && printf "%s" "$opts" \ - || printf "options : %s" "$opts" | tr -d '\n ' - fi) + $(case "$type" in + ( "ouverte" ) continue ;; + ( "regex" ) printf "format autorisé : %s" "$options" ;; + ( * ) + [ "$choix" = "+" ] \ + && printf "%s\n" "une ou plusieurs options vraies" \ + || printf "%s\n" "une seule option vraie" + [ -n "$options" ] \ + && printf "%s" "$opts" \ + || printf "options : %s" "$opts" | tr -d '\n ' + ;; + esac) $dat @@ -49,9 +53,13 @@ demander() { echo "$possibleanswers" | grep -o '.' | head -n$nbq > $tmpd/o answers=$(cat $tmpd/o | tr -d '\n') - [ "$type" = "ouverte" ] \ - && { tail -fn0 "$logs" | stdbuf -oL grep -E "GET /$id" >> $tmpd/in & } \ - || { tail -fn0 "$logs" | stdbuf -oL grep -E "GET /$id/[$answers]$choix " >> $tmpd/in & } + case "$type" in + ( "ouverte" ) pattern="GET /$id/";; + ( "regex" ) pattern="GET /$id/${options:-[ABCD] } ";; + ( * ) pattern="GET /$id/[$answers]$choix ";; + esac + + tail -fn0 "$logs" | stdbuf -oL grep -E "$pattern" >> $tmpd/in & tailpid=$! while :;do diff --git a/questions b/questions @@ -5,9 +5,14 @@ options: om~psg~les verts choix: multiple demander +question: Donnez un exemple de nombre réel svp +type: regex +options: [0-9]*[,.][0-9]+ +unique: non +demander + question: "Quels sentiments vous évoquent l'anarchie ?" type: ouverte -unique: non demander question: "Sachant que :