Commit 6f0ef3e3b25221926221b516dc67f94ad89af361
1 parent
bbe09148
Exists in
master
and in
1 other branch
- fixed bug where checkbox answers with all options unchecked would not be accepted.
- randomize question order and sample for 8 questions at maximum.
Showing
2 changed files
with
15 additions
and
9 deletions
Show diff stats
knowledge.py
@@ -94,6 +94,11 @@ class StudentKnowledge(object): | @@ -94,6 +94,11 @@ class StudentKnowledge(object): | ||
94 | self.correct_answers = 0 | 94 | self.correct_answers = 0 |
95 | self.wrong_answers = 0 | 95 | self.wrong_answers = 0 |
96 | self.finished_questions = [] | 96 | self.finished_questions = [] |
97 | + | ||
98 | + | ||
99 | + # TODO select a subset of question and randomize order | ||
100 | + questionlist = random.sample(questionlist, k=min(8, len(questionlist))) | ||
101 | + | ||
97 | self.questions = [factory[qref].generate() for qref in questionlist] | 102 | self.questions = [factory[qref].generate() for qref in questionlist] |
98 | logger.debug(f'Total: {len(self.questions)} questions') | 103 | logger.debug(f'Total: {len(self.questions)} questions') |
99 | 104 | ||
@@ -137,10 +142,11 @@ class StudentKnowledge(object): | @@ -137,10 +142,11 @@ class StudentKnowledge(object): | ||
137 | grade = q.correct() | 142 | grade = q.correct() |
138 | logger.debug(f'Grade = {grade:.2} ({q["ref"]})') | 143 | logger.debug(f'Grade = {grade:.2} ({q["ref"]})') |
139 | 144 | ||
145 | + self.finished_questions.append(q) # both correct and wrong answers | ||
146 | + | ||
140 | # if answer is correct, get next question | 147 | # if answer is correct, get next question |
141 | if grade > 0.999: | 148 | if grade > 0.999: |
142 | self.correct_answers += 1 | 149 | self.correct_answers += 1 |
143 | - self.finished_questions.append(q) | ||
144 | try: | 150 | try: |
145 | self.current_question = self.questions.pop(0) # FIXME empty? | 151 | self.current_question = self.questions.pop(0) # FIXME empty? |
146 | except IndexError: | 152 | except IndexError: |
serve.py
@@ -256,15 +256,15 @@ class QuestionHandler(BaseHandler): | @@ -256,15 +256,15 @@ class QuestionHandler(BaseHandler): | ||
256 | 256 | ||
257 | # check answer and get next question (same, new or None) | 257 | # check answer and get next question (same, new or None) |
258 | answer = self.get_body_arguments('answer') # list | 258 | answer = self.get_body_arguments('answer') # list |
259 | - if not answer: | 259 | + |
260 | + # answers returned in a list. fix depending on question type | ||
261 | + qtype = self.learn.get_student_question_type(user) | ||
262 | + if qtype in ('success', 'information', 'info'): # FIXME unused? | ||
260 | answer = None | 263 | answer = None |
261 | - else: | ||
262 | - # answers returned in a list. fix depending on question type | ||
263 | - qtype = self.learn.get_student_question_type(user) | ||
264 | - if qtype in ('success', 'information', 'info'): # FIXME unused? | ||
265 | - answer = None | ||
266 | - elif qtype != 'checkbox': # radio, text, textarea, ... | ||
267 | - answer = answer[0] | 264 | + elif qtype == 'radio' and not answer: |
265 | + answer = None | ||
266 | + elif qtype != 'checkbox': # radio, text, textarea, ... | ||
267 | + answer = answer[0] | ||
268 | 268 | ||
269 | # check answer in another thread (nonblocking) | 269 | # check answer in another thread (nonblocking) |
270 | loop = asyncio.get_event_loop() | 270 | loop = asyncio.get_event_loop() |