Commit c8e2e8e63f81b3e4413cf3ad7e571f29d33e7d3d
1 parent
40ac8630
Exists in
master
and in
1 other branch
- show solution in review for unanswered questions.
- fixes and improvements in the demo.
Showing
3 changed files
with
61 additions
and
44 deletions
Show diff stats
demo/questions/questions-tutorial.yaml
... | ... | @@ -11,17 +11,26 @@ |
11 | 11 | |
12 | 12 | ```yaml |
13 | 13 | #----------------------------------------------------------------------------- |
14 | + # ref: Referência atribuida a um teste. A mesma referência pode ser usada em vários turnos | |
15 | + # title: Título do teste, por exemplo "Unidade Curricular - Exame de recurso" | |
16 | + # database: Base de dados previamente inicializada com os alunos inscritos usando o comando initdb.py | |
17 | + # answers: Directório onde vão ficar guardados os testes dos alunos com as respostas e respectivas correcções. | |
14 | 18 | ref: tutorial |
15 | 19 | title: Teste de Avaliação |
16 | 20 | database: demo/students.db |
17 | 21 | answers_dir: demo/ans |
18 | 22 | |
19 | - # (opcional) minutos | |
20 | - duration: 90 | |
23 | + # Duração do teste, apenas informativo para o aluno | |
24 | + # (opcional, default: infinito) minutos | |
25 | + duration: 60 | |
21 | 26 | |
22 | 27 | # (opcional, default: False) mostra cotação das perguntas aos alunos, escala 0-20. |
23 | 28 | show_points: True |
24 | 29 | |
30 | + # untested. Points are scaled so that total of exam is given by scale_max | |
31 | + scale_points: True | |
32 | + scale_max: 20 | |
33 | + | |
25 | 34 | # (opcional, default: False) |
26 | 35 | debug: False |
27 | 36 | |
... | ... | @@ -29,7 +38,7 @@ |
29 | 38 | # Directório base onde estão as perguntas |
30 | 39 | questions_dir: ~/topics/P1 |
31 | 40 | |
32 | - # Ficheiros de perguntas a importar | |
41 | + # Ficheiros de perguntas a importar (relativamente a ~/topics/P1) | |
33 | 42 | files: |
34 | 43 | - topico_A/parte_1/questions.yaml |
35 | 44 | - topico_A/parte_2/questions.yaml |
... | ... | @@ -39,16 +48,16 @@ |
39 | 48 | # Perguntas do teste e respectivas cotações |
40 | 49 | questions: |
41 | 50 | - ref: pergunta1 |
42 | - grade: 3.5 | |
51 | + points: 3.5 | |
43 | 52 | |
44 | 53 | - ref: pergunta2 |
45 | - grade: 2 | |
54 | + points: 2 | |
46 | 55 | |
47 | 56 | - ref: tabela-auxiliar |
48 | - | |
57 | + | |
49 | 58 | # escolhe uma das seguintes aleatoriamente |
50 | 59 | - ref: [ pergunta3a, pergunta3b ] |
51 | - grade: 0.5 | |
60 | + points: 0.5 | |
52 | 61 | |
53 | 62 | # a cotação é 1.0 por defeito, caso não esteja definida |
54 | 63 | - ref: pergunta4 |
... | ... | @@ -109,7 +118,7 @@ |
109 | 118 | options: |
110 | 119 | - Opção 0 |
111 | 120 | - Opção 1 |
112 | - - Opção 2 | |
121 | + - Opção 2 | |
113 | 122 | - Opção 3 |
114 | 123 | - Opção 4 |
115 | 124 | ``` |
... | ... | @@ -139,7 +148,8 @@ |
139 | 148 | correct: [1, 1, 0, 0, 0] |
140 | 149 | choose: 3 |
141 | 150 | shuffle: True |
142 | - | |
151 | + solution: | | |
152 | + A solução correcta é a **opção 0**. | |
143 | 153 | |
144 | 154 | # ---------------------------------------------------------------------------- |
145 | 155 | - type: checkbox |
... | ... | @@ -156,10 +166,10 @@ |
156 | 166 | title: Escolha múltipla, várias opções correctas |
157 | 167 | text: | |
158 | 168 | Bla bla bla. |
159 | - options: | |
169 | + options: | |
160 | 170 | - Opção 0 |
161 | 171 | - Opção 1 |
162 | - - Opção 2 | |
172 | + - Opção 2 | |
163 | 173 | - Opção 3 |
164 | 174 | - Opção 4 |
165 | 175 | correct: [1, -1, -1, 1, -1] |
... | ... | @@ -194,14 +204,14 @@ |
194 | 204 | |
195 | 205 | # ---------------------------------------------------------------------------- |
196 | 206 | - type: text |
197 | - ref: tut-text | |
207 | + ref: tut-text | |
198 | 208 | title: Resposta de texto em linha |
199 | 209 | text: | |
200 | 210 | Este tipo de perguntas permite uma resposta numa linha de texto. A resposta está correcta se coincidir com alguma das respostas admissíveis. |
201 | 211 | |
202 | 212 | ```yaml |
203 | 213 | - type: text |
204 | - ref: tut-text | |
214 | + ref: tut-text | |
205 | 215 | title: Resposta de texto em linha |
206 | 216 | text: | |
207 | 217 | Bla bla bla |
... | ... | @@ -234,7 +244,7 @@ |
234 | 244 | |
235 | 245 | # --------------------------------------------------------------------------- |
236 | 246 | - type: numeric-interval |
237 | - ref: tut-numeric-interval | |
247 | + ref: tut-numeric-interval | |
238 | 248 | title: Resposta numérica em linha de texto |
239 | 249 | text: | |
240 | 250 | Este tipo de perguntas esperam uma resposta numérica (vírgula flutuante). |
... | ... | @@ -242,20 +252,22 @@ |
242 | 252 | |
243 | 253 | ```yaml |
244 | 254 | - type: numeric-interval |
245 | - ref: tut-numeric-interval | |
255 | + ref: tut-numeric-interval | |
246 | 256 | title: Resposta numérica em linha de texto |
247 | 257 | text: | |
248 | 258 | Bla bla bla |
249 | - correct: [3.14, 3.15] | |
259 | + correct: [3.14, 3.15] | |
250 | 260 | ``` |
251 | 261 | |
252 | 262 | Neste exemplo o intervalo de respostas correctas é [3.14, 3.15]. |
253 | 263 | correct: [3.14, 3.15] |
264 | + solution: | | |
265 | + Um exemplo de uma resposta correcta é o número $\pi\approx 3.14159265359$. | |
254 | 266 | |
255 | 267 | |
256 | 268 | # --------------------------------------------------------------------------- |
257 | 269 | - type: textarea |
258 | - ref: tut-textarea | |
270 | + ref: tut-textarea | |
259 | 271 | title: Resposta em múltiplas linhas de texto |
260 | 272 | text: | |
261 | 273 | Este tipo de perguntas permitem respostas em múltiplas linhas de texto, que podem ser úteis por exemplo para validar código. |
... | ... | @@ -264,7 +276,7 @@ |
264 | 276 | |
265 | 277 | ```yaml |
266 | 278 | - type: textarea |
267 | - ref: tut-textarea | |
279 | + ref: tut-textarea | |
268 | 280 | title: Resposta em múltiplas linhas de texto |
269 | 281 | text: | |
270 | 282 | Bla bla bla |
... | ... | @@ -335,7 +347,7 @@ |
335 | 347 | return 0; // comentario |
336 | 348 | } |
337 | 349 | ``` |
338 | - | |
350 | + | |
339 | 351 | Faz-se assim: |
340 | 352 | |
341 | 353 | - type: success |
... | ... | @@ -345,18 +357,18 @@ |
345 | 357 | Também não conta para avaliação. |
346 | 358 | |
347 | 359 | Já vimos como se introduzem fórmulas LaTeX, também se pode escrever troços de código: |
348 | - | |
360 | + | |
349 | 361 | ```C |
350 | 362 | int main() { |
351 | 363 | printf("Hello world!"); |
352 | 364 | return 0; // comentario |
353 | 365 | } |
354 | 366 | ``` |
355 | - | |
367 | + | |
356 | 368 | |
357 | 369 | # --------------------------------------------------------------------------- |
358 | 370 | - type: warning |
359 | - ref: tut-warning | |
371 | + ref: tut-warning | |
360 | 372 | title: Texto informativo (aviso) |
361 | 373 | text: | |
362 | 374 | Não conta para avaliação. |
... | ... | @@ -373,7 +385,7 @@ |
373 | 385 | |
374 | 386 | ```yaml |
375 | 387 | - type: warning |
376 | - ref: tut-warning | |
388 | + ref: tut-warning | |
377 | 389 | title: Texto informativo (aviso) |
378 | 390 | text: | |
379 | 391 | Bla bla bla |
... | ... | @@ -390,7 +402,7 @@ |
390 | 402 | |
391 | 403 | # ---------------------------------------------------------------------------- |
392 | 404 | - type: alert |
393 | - ref: tut-alert | |
405 | + ref: tut-alert | |
394 | 406 | title: Texto informativo (perigo) |
395 | 407 | text: | |
396 | 408 | Texto importante. Não conta para avaliação. | ... | ... |
demo/test-tutorial.yaml
... | ... | @@ -37,24 +37,25 @@ questions_dir: demo |
37 | 37 | # Selected questions will be obtained from these files. |
38 | 38 | # If undefined, all yaml files in questions_dir are loaded (not recommended). |
39 | 39 | files: |
40 | - - questions/questions-tutorial.yaml | |
40 | + - questions/questions-tutorial.yaml | |
41 | 41 | |
42 | 42 | # This is the list of questions that will make up the test. |
43 | 43 | # The order is preserved. |
44 | 44 | # There are several ways to define each question (explained below). |
45 | 45 | questions: |
46 | - - tut-test | |
47 | - - tut-questions | |
48 | - | |
49 | - - tut-radio | |
50 | - - tut-checkbox | |
51 | - - tut-text | |
52 | - - tut-text-regex | |
53 | - - tut-numeric-interval | |
54 | - - tut-textarea | |
55 | - | |
56 | - - tut-information | |
57 | - - tut-success | |
58 | - - tut-warning | |
59 | - - tut-alert | |
60 | - | |
46 | + - tut-test | |
47 | + - tut-questions | |
48 | + | |
49 | + - tut-radio | |
50 | + - tut-checkbox | |
51 | + - tut-text | |
52 | + - tut-text-regex | |
53 | + - tut-numeric-interval | |
54 | + - ref: tut-textarea | |
55 | + points: 2.0 | |
56 | + | |
57 | + - tut-information | |
58 | + - tut-success | |
59 | + - tut-warning | |
60 | + - tut-alert | |
61 | + | ... | ... |
templates/review-question.html
... | ... | @@ -41,8 +41,8 @@ |
41 | 41 | pontos<br> |
42 | 42 | {{ q['comments'] }} |
43 | 43 | {% if 'solution' in q %} |
44 | - <hr> | |
45 | - {{ md('**Solução:** ' + q['solution']) }} | |
44 | + <hr> | |
45 | + {{ md('**Solução:** ' + q['solution']) }} | |
46 | 46 | {% end %} |
47 | 47 | </p> |
48 | 48 | {% else %} |
... | ... | @@ -52,8 +52,8 @@ |
52 | 52 | pontos<br> |
53 | 53 | {{ q['comments'] }} |
54 | 54 | {% if 'solution' in q %} |
55 | - <hr> | |
56 | - {{ md('**Solução:** ' + q['solution']) }} | |
55 | + <hr> | |
56 | + {{ md('**Solução:** ' + q['solution']) }} | |
57 | 57 | {% end %} |
58 | 58 | </p> |
59 | 59 | {% end %} |
... | ... | @@ -94,6 +94,10 @@ |
94 | 94 | <i class="fas fa-ban fa-3x" aria-hidden="true"></i> |
95 | 95 | {{ round(q['grade'] * q['points'], 2) }} pontos<br> |
96 | 96 | {{ q['comments'] }} |
97 | + {% if 'solution' in q %} | |
98 | + <hr> | |
99 | + {{ md('**Solução:** ' + q['solution']) }} | |
100 | + {% end %} | |
97 | 101 | </p> |
98 | 102 | |
99 | 103 | {% if t['show_ref'] %} | ... | ... |