Commit db2aceedc099a63be6b38691f9adb90efd9073ff
1 parent
1cdce3ee
Exists in
master
and in
1 other branch
- generates questions in sequence corresponding to topological sort of the topics
Showing
2 changed files
with
34 additions
and
18 deletions
Show diff stats
app.py
... | ... | @@ -126,7 +126,6 @@ class LearnApp(object): |
126 | 126 | s.commit() |
127 | 127 | logger.debug('check_answer: saving done') |
128 | 128 | |
129 | - logger.debug('check_answer: will return knowledge.new_question') | |
130 | 129 | return knowledge.new_question() |
131 | 130 | |
132 | 131 | # ------------------------------------------------------------------------ | ... | ... |
knowledge.py
... | ... | @@ -19,39 +19,56 @@ class Knowledge(object): |
19 | 19 | def __init__(self, depgraph, state={}): |
20 | 20 | self.depgraph = depgraph |
21 | 21 | self.state = state # {node: level, node: level, ...} |
22 | + | |
23 | + self.topic = self.topic_generator() | |
24 | + self.current_topic = next(self.topic) | |
25 | + | |
26 | + self.questions = self.generate_questions_for_topic(self.current_topic) | |
22 | 27 | self.current_question = None |
23 | 28 | |
24 | - self.seq = nx.topological_sort(self.depgraph) | |
25 | - self.topic = None | |
29 | + # ------------------------------------------------------------------------ | |
30 | + def topic_generator(self): | |
31 | + topics = nx.topological_sort(self.depgraph) # FIXME for now... | |
32 | + for t in topics: | |
33 | + self.questions = self.generate_questions_for_topic(t) | |
34 | + yield t | |
26 | 35 | |
36 | + # ------------------------------------------------------------------------ | |
37 | + def generate_questions_for_topic(self, topic): | |
38 | + factory = self.depgraph.node[topic]['factory'] | |
39 | + return [q.generate() for q in factory] | |
27 | 40 | |
41 | + # ------------------------------------------------------------------------ | |
28 | 42 | def get_current_question(self): |
29 | 43 | return self.current_question |
30 | 44 | |
45 | + # ------------------------------------------------------------------------ | |
31 | 46 | def get_knowledge_state(self): |
32 | 47 | return self.state |
33 | 48 | |
34 | - # --- generates a new question given the current state | |
49 | + # --- generates a new question given the current state ------------------- | |
35 | 50 | def new_question(self): |
36 | 51 | logger.debug('new_question()') |
52 | + | |
37 | 53 | if self.current_question is None or self.current_question.get('grade', 0.0) > 0.9999: |
38 | - g = self.depgraph | |
39 | - # choose topic, ie, node of the graph | |
40 | - # print(g.nodes()) | |
41 | - self.topic = random.choice(g.nodes()) # FIXME | |
42 | - # print(topic) | |
43 | - # choose question from that topic | |
44 | - question = random.choice(g.node[self.topic]['factory']) | |
45 | - # print(question) | |
46 | - | |
47 | - self.current_question = question.generate() | |
48 | - # print(self.current_question) | |
49 | - | |
50 | - # self.current_question = g.node[topic]['factory'].generate(ref) | |
54 | + | |
55 | + while not self.questions: | |
56 | + self.state[self.current_topic] = 1.0 # finished topic! | |
57 | + try: | |
58 | + self.current_topic = next(self.topic) | |
59 | + except StopIteration: | |
60 | + self.topic = self.topic_generator() | |
61 | + self.current_topic = next(self.topic) | |
62 | + self.questions = self.generate_questions_for_topic(self.current_topic) | |
63 | + | |
64 | + print(self.current_topic) | |
65 | + print(self.current_question) | |
66 | + self.current_question = self.questions.pop(0) | |
51 | 67 | self.current_question['start_time'] = datetime.now() |
68 | + | |
52 | 69 | return self.current_question |
53 | 70 | |
54 | - # --- checks answer and updates knowledge state | |
71 | + # --- checks answer ------------------------------------------------------ | |
55 | 72 | # returns current question with correction, time and comments updated |
56 | 73 | def check_answer(self, answer): |
57 | 74 | logger.debug(f'check_answer("{answer}")') | ... | ... |