Commit 2e43c7a2a2c6d55e5fd1b42a821cd98727fb4254
1 parent
bbfa03c9
Exists in
master
and in
1 other branch
updates demo-tutorial
Showing
3 changed files
with
34 additions
and
32 deletions
Show diff stats
demo/demo.yaml
@@ -22,7 +22,7 @@ title: Teste de demonstração (tutorial) | @@ -22,7 +22,7 @@ title: Teste de demonstração (tutorial) | ||
22 | 22 | ||
23 | # Duration in minutes. | 23 | # Duration in minutes. |
24 | # (0 or undefined means infinite time) | 24 | # (0 or undefined means infinite time) |
25 | -duration: 5 | 25 | +duration: 20 |
26 | 26 | ||
27 | # Automatic test submission after the given 'duration' timeout | 27 | # Automatic test submission after the given 'duration' timeout |
28 | # (default: false) | 28 | # (default: false) |
@@ -37,11 +37,6 @@ show_points: true | @@ -37,11 +37,6 @@ show_points: true | ||
37 | # (default: no scaling, just use question points) | 37 | # (default: no scaling, just use question points) |
38 | scale: [0, 5] | 38 | scale: [0, 5] |
39 | 39 | ||
40 | -# DEPRECATED: old version, to be removed | ||
41 | -# scale_max: 20 | ||
42 | -# scale_min: 0 | ||
43 | -# scale_points: true | ||
44 | - | ||
45 | # ---------------------------------------------------------------------------- | 40 | # ---------------------------------------------------------------------------- |
46 | # Base path applied to the questions files and all the scripts | 41 | # Base path applied to the questions files and all the scripts |
47 | # including question generators and correctors. | 42 | # including question generators and correctors. |
demo/questions/generators/generate-question.py
@@ -8,6 +8,7 @@ Arguments are read from stdin. | @@ -8,6 +8,7 @@ Arguments are read from stdin. | ||
8 | from random import randint | 8 | from random import randint |
9 | import sys | 9 | import sys |
10 | 10 | ||
11 | +# read two arguments from the field `args` specified in the question yaml file | ||
11 | a, b = (int(n) for n in sys.argv[1:]) | 12 | a, b = (int(n) for n in sys.argv[1:]) |
12 | 13 | ||
13 | x = randint(a, b) | 14 | x = randint(a, b) |
@@ -18,10 +19,13 @@ print(f"""--- | @@ -18,10 +19,13 @@ print(f"""--- | ||
18 | type: text | 19 | type: text |
19 | title: Geradores de perguntas | 20 | title: Geradores de perguntas |
20 | text: | | 21 | text: | |
21 | - Existe a possibilidade da pergunta ser gerada por um programa externo. O | ||
22 | - programa deve escrever no `stdout` uma pergunta em formato `yaml` tal como os | ||
23 | - exemplos anteriores. Pode também receber argumentos para parametrizar a | ||
24 | - pergunta. Aqui está um exemplo de uma pergunta gerada por um script python: | 22 | + |
23 | + As perguntas podem ser estáticas (como as que vimos até aqui), ou serem | ||
24 | + geradas dinâmicamente por um programa externo. Para gerar uma pergunta, o | ||
25 | + programa deve escrever texto no `stdout` em formato `yaml` tal como os | ||
26 | + exemplos das perguntas estáticas dos tipos apresentados anteriormente. Pode | ||
27 | + também receber argumentos de linha de comando para parametrizar a pergunta. | ||
28 | + Aqui está um exemplo de uma pergunta gerada por um script python: | ||
25 | 29 | ||
26 | ```python | 30 | ```python |
27 | #!/usr/bin/env python3 | 31 | #!/usr/bin/env python3 |
@@ -46,7 +50,7 @@ text: | | @@ -46,7 +50,7 @@ text: | | ||
46 | ``` | 50 | ``` |
47 | 51 | ||
48 | Este script deve ter permissões para poder ser executado no terminal. | 52 | Este script deve ter permissões para poder ser executado no terminal. |
49 | - Podemos testar o programa no terminal `./gen-somar.py 1 50` e verificar que | 53 | + Podemos testar o programa no terminal `./gen-somar.py 1 100` e verificar que |
50 | o output é uma pergunta válida em formato `yaml`. Agora é necessário indicar | 54 | o output é uma pergunta válida em formato `yaml`. Agora é necessário indicar |
51 | que este script deve ser usado para gerar uma pergunta. | 55 | que este script deve ser usado para gerar uma pergunta. |
52 | 56 | ||
@@ -60,7 +64,8 @@ text: | | @@ -60,7 +64,8 @@ text: | | ||
60 | args: [1, 100] | 64 | args: [1, 100] |
61 | ``` | 65 | ``` |
62 | 66 | ||
63 | - O programa pode receber uma lista de argumentos declarados em `args`. | 67 | + O programa pode receber uma lista de argumentos de linha de comando |
68 | + declarados em `args`. | ||
64 | 69 | ||
65 | --- | 70 | --- |
66 | 71 |
demo/questions/questions-tutorial.yaml
@@ -24,9 +24,8 @@ | @@ -24,9 +24,8 @@ | ||
24 | duration: 60 # duração da prova em minutos (default: inf) | 24 | duration: 60 # duração da prova em minutos (default: inf) |
25 | autosubmit: true # submissão automática (default: false) | 25 | autosubmit: true # submissão automática (default: false) |
26 | show_points: true # mostra cotação das perguntas (default: true) | 26 | show_points: true # mostra cotação das perguntas (default: true) |
27 | - scale_points: true # recalcula cotações para [scale_min, scale_max] | ||
28 | - scale_max: 20 # limite superior da escala (default: 20) | ||
29 | - scale_min: 0 # limite inferior da escala (default: 0) | 27 | + scale: [0, 20] # limites inferior e superior da escala (default: [0,20]) |
28 | + scale_points: true # normaliza cotações para a escala definida | ||
30 | debug: false # mostra informação de debug no browser | 29 | debug: false # mostra informação de debug no browser |
31 | 30 | ||
32 | # -------------------------------------------------------------------------- | 31 | # -------------------------------------------------------------------------- |
@@ -48,9 +47,9 @@ | @@ -48,9 +47,9 @@ | ||
48 | points: 3.5 | 47 | points: 3.5 |
49 | 48 | ||
50 | - ref: pergunta2 | 49 | - ref: pergunta2 |
51 | - point: 2.0 | 50 | + points: 2.0 |
52 | 51 | ||
53 | - # a cotação é 1.0 por defeito, se omitida | 52 | + # a cotação é 1.0 por defeito |
54 | - ref: pergunta3 | 53 | - ref: pergunta3 |
55 | 54 | ||
56 | # uma string (não dict), é interpretada como referência | 55 | # uma string (não dict), é interpretada como referência |
@@ -153,17 +152,19 @@ | @@ -153,17 +152,19 @@ | ||
153 | entre 0 e 1, sendo atribuída a respectiva cotação, mas só o valor 1 | 152 | entre 0 e 1, sendo atribuída a respectiva cotação, mas só o valor 1 |
154 | representa uma opção certa. | 153 | representa uma opção certa. |
155 | 154 | ||
156 | - Por defeito, as opções são apresentadas por ordem aleatória. | ||
157 | - Para manter a ordem definida acrescenta-se: | 155 | + Por defeito, as opções são apresentadas por ordem aleatória, mas é possível |
156 | + usar a ordem predefinida. Por exemplo, para manter a ordem e indicar que a | ||
157 | + resposta correcta é a do meio define-se: | ||
158 | 158 | ||
159 | ```yaml | 159 | ```yaml |
160 | + correct: [0, 0, 1, 0, 0] | ||
160 | shuffle: false | 161 | shuffle: false |
161 | ``` | 162 | ``` |
162 | 163 | ||
163 | - Por defeito, as respostas erradas descontam, tendo uma cotação de | ||
164 | - $-1/(n-1)$ do valor da pergunta, onde $n$ é o número de opções apresentadas | ||
165 | - ao aluno (a ideia é o valor esperado ser zero quando as respostas são | ||
166 | - aleatórias e uniformemente distribuídas). Para não descontar acrescenta-se: | 164 | + As respostas erradas descontam, tendo uma cotação de $-1/(n-1)$ do valor da |
165 | + pergunta, onde $n$ é o número de opções apresentadas ao aluno (a ideia é o | ||
166 | + valor esperado ser zero quando as respostas são aleatórias e uniformemente | ||
167 | + distribuídas). Para não descontar acrescenta-se: | ||
167 | 168 | ||
168 | ```yaml | 169 | ```yaml |
169 | discount: false | 170 | discount: false |
@@ -269,7 +270,7 @@ | @@ -269,7 +270,7 @@ | ||
269 | Neste caso, as respostas aceites são `azul`, `Azul` ou `AZUL`. | 270 | Neste caso, as respostas aceites são `azul`, `Azul` ou `AZUL`. |
270 | 271 | ||
271 | Em alguns casos pode ser conveniente transformar a resposta antes de a | 272 | Em alguns casos pode ser conveniente transformar a resposta antes de a |
272 | - comparar, por exemplo para remover espaços ou converter para maiúsculas. | 273 | + comparar, por exemplo para remover espaços ou converter para minúsculas. |
273 | A opção `transform` permite dar uma sequência de transformações a aplicar à | 274 | A opção `transform` permite dar uma sequência de transformações a aplicar à |
274 | resposta do aluno, por exemplo: | 275 | resposta do aluno, por exemplo: |
275 | 276 | ||
@@ -278,10 +279,10 @@ | @@ -278,10 +279,10 @@ | ||
278 | correct: ['azul'] | 279 | correct: ['azul'] |
279 | ``` | 280 | ``` |
280 | 281 | ||
281 | - Neste momento estão disponíveis as seguintes transformações: | 282 | + Estão disponíveis as seguintes transformações: |
282 | 283 | ||
283 | - * `trim` remove os espaços do início e fim da resposta, os do meio mantêm-se | ||
284 | - inalterados. | 284 | + * `trim` remove os espaços do início e fim da resposta, os espaços do meio |
285 | + mantêm-se inalterados. | ||
285 | * `remove_space` remove todos os espaços (início, meio e fim). | 286 | * `remove_space` remove todos os espaços (início, meio e fim). |
286 | * `normalize_space` remove espaços do início e fim (trim), e substitui | 287 | * `normalize_space` remove espaços do início e fim (trim), e substitui |
287 | múltiplos espaços por um único espaço (no meio). | 288 | múltiplos espaços por um único espaço (no meio). |
@@ -375,10 +376,11 @@ | @@ -375,10 +376,11 @@ | ||
375 | são as mais flexíveis. | 376 | são as mais flexíveis. |
376 | 377 | ||
377 | A resposta é enviada para um programa externo para ser avaliada. | 378 | A resposta é enviada para um programa externo para ser avaliada. |
378 | - O programa externo é um programa escrito numa linguagem qualquer, desde que | ||
379 | - seja executável pelo sistema operativo (pode ser um script ou binário). | ||
380 | - Este programa recebe a resposta submetida pelo aluno via `stdin` e devolve | ||
381 | - a classificação via `stdout`. | 379 | + O programa externo é um programa que tem de ser executável pelo pelo |
380 | + sistema operativo (pode ser um binário ou script desde que o respectivo | ||
381 | + interpretador instalado). | ||
382 | + Este programa externo recebe a resposta submetida pelo aluno via `stdin` e | ||
383 | + devolve a classificação via `stdout`. | ||
382 | Exemplo: | 384 | Exemplo: |
383 | 385 | ||
384 | ```yaml | 386 | ```yaml |
@@ -566,7 +568,7 @@ | @@ -566,7 +568,7 @@ | ||
566 | duas possibilidads: | 568 | duas possibilidads: |
567 | 569 | ||
568 | - Imagens inline: não têm título definido e podem ser incluídas no meio de | 570 | - Imagens inline: não têm título definido e podem ser incluídas no meio de |
569 | - uma linha de texto usando``. | 571 | + uma linha de texto usando ``. |
570 | - Imagens centradas com título: ``. | 572 | - Imagens centradas com título: ``. |
571 | O título é colocado por baixo da imagem. Pode ser uma string vazia. | 573 | O título é colocado por baixo da imagem. Pode ser uma string vazia. |
572 | 574 |