X-Git-Url: http://git.tremily.us/?a=blobdiff_plain;f=quizzer%2Fui%2F__init__.py;h=caf2a71c713a845b4f115ab9ddbb41a0d4b96ab1;hb=8a57524850deb563111da68779fb571885e1be19;hp=69b120315e463074075c3e91e6e0c84a770441f7;hpb=13125aff1b7bd1d61cea6ab60a904e30b91b1f38;p=quizzer.git diff --git a/quizzer/ui/__init__.py b/quizzer/ui/__init__.py index 69b1203..caf2a71 100644 --- a/quizzer/ui/__init__.py +++ b/quizzer/ui/__init__.py @@ -1,10 +1,17 @@ +from .. import answerdb as _answerdb + + class UserInterface (object): "Give a quiz over a generic user interface" - def __init__(self, quiz=None, answers=None): + def __init__(self, quiz=None, answers=None, stack=None): self.quiz = quiz if answers is None: - answers = {} + answers = _answerdb.AnswerDatabase() self.answers = answers + if stack is None: + stack = self.answers.get_never_correctly_answered( + questions=quiz.leaf_questions()) + self.stack = stack def run(self): raise NotImplementedError() @@ -13,30 +20,14 @@ class UserInterface (object): raise NotImplementedError() def get_question(self): - remaining = self.get_unanswered() - if remaining: - return remaining[0] + if self.stack: + return self.stack.pop(0) def process_answer(self, question, answer): - if question not in self.answers: - self.answers[question] = [] correct = question.check(answer) - self.answers[question].append({ - 'answer': answer, - 'correct': correct, - }) + self.answers.add(question=question, answer=answer, correct=correct) + if not correct: + self.stack.insert(0, question) + for qid in reversed(question.dependencies): + self.stack.insert(0, self.quiz.get(id=qid)) return correct - - def get_answered(self): - return [q for q in self.quiz if q in self.answers] - - def get_unanswered(self): - return [q for q in self.quiz if q not in self.answers] - - def get_correctly_answered(self): - return [q for q in self.quiz - if True in [a['correct'] for a in self.answers.get(q, [])]] - - def get_never_correctly_answered(self): - return [q for q in self.quiz - if True not in [a['correct'] for a in self.answers.get(q, [])]]