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 | 22 | |
23 | 23 | # Duration in minutes. |
24 | 24 | # (0 or undefined means infinite time) |
25 | -duration: 5 | |
25 | +duration: 20 | |
26 | 26 | |
27 | 27 | # Automatic test submission after the given 'duration' timeout |
28 | 28 | # (default: false) |
... | ... | @@ -37,11 +37,6 @@ show_points: true |
37 | 37 | # (default: no scaling, just use question points) |
38 | 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 | 41 | # Base path applied to the questions files and all the scripts |
47 | 42 | # including question generators and correctors. | ... | ... |
demo/questions/generators/generate-question.py
... | ... | @@ -8,6 +8,7 @@ Arguments are read from stdin. |
8 | 8 | from random import randint |
9 | 9 | import sys |
10 | 10 | |
11 | +# read two arguments from the field `args` specified in the question yaml file | |
11 | 12 | a, b = (int(n) for n in sys.argv[1:]) |
12 | 13 | |
13 | 14 | x = randint(a, b) |
... | ... | @@ -18,10 +19,13 @@ print(f"""--- |
18 | 19 | type: text |
19 | 20 | title: Geradores de perguntas |
20 | 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 | 30 | ```python |
27 | 31 | #!/usr/bin/env python3 |
... | ... | @@ -46,7 +50,7 @@ text: | |
46 | 50 | ``` |
47 | 51 | |
48 | 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 | 54 | o output é uma pergunta válida em formato `yaml`. Agora é necessário indicar |
51 | 55 | que este script deve ser usado para gerar uma pergunta. |
52 | 56 | |
... | ... | @@ -60,7 +64,8 @@ text: | |
60 | 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 | 24 | duration: 60 # duração da prova em minutos (default: inf) |
25 | 25 | autosubmit: true # submissão automática (default: false) |
26 | 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 | 29 | debug: false # mostra informação de debug no browser |
31 | 30 | |
32 | 31 | # -------------------------------------------------------------------------- |
... | ... | @@ -48,9 +47,9 @@ |
48 | 47 | points: 3.5 |
49 | 48 | |
50 | 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 | 53 | - ref: pergunta3 |
55 | 54 | |
56 | 55 | # uma string (não dict), é interpretada como referência |
... | ... | @@ -153,17 +152,19 @@ |
153 | 152 | entre 0 e 1, sendo atribuída a respectiva cotação, mas só o valor 1 |
154 | 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 | 159 | ```yaml |
160 | + correct: [0, 0, 1, 0, 0] | |
160 | 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 | 169 | ```yaml |
169 | 170 | discount: false |
... | ... | @@ -269,7 +270,7 @@ |
269 | 270 | Neste caso, as respostas aceites são `azul`, `Azul` ou `AZUL`. |
270 | 271 | |
271 | 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 | 274 | A opção `transform` permite dar uma sequência de transformações a aplicar à |
274 | 275 | resposta do aluno, por exemplo: |
275 | 276 | |
... | ... | @@ -278,10 +279,10 @@ |
278 | 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 | 286 | * `remove_space` remove todos os espaços (início, meio e fim). |
286 | 287 | * `normalize_space` remove espaços do início e fim (trim), e substitui |
287 | 288 | múltiplos espaços por um único espaço (no meio). |
... | ... | @@ -375,10 +376,11 @@ |
375 | 376 | são as mais flexíveis. |
376 | 377 | |
377 | 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 | 384 | Exemplo: |
383 | 385 | |
384 | 386 | ```yaml |
... | ... | @@ -566,7 +568,7 @@ |
566 | 568 | duas possibilidads: |
567 | 569 | |
568 | 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 | 572 | - Imagens centradas com título: ``. |
571 | 573 | O título é colocado por baixo da imagem. Pode ser uma string vazia. |
572 | 574 | ... | ... |