# python standard library import random from datetime import datetime import logging # libraries import networkx as nx # this project import questions # setup logger for this module logger = logging.getLogger(__name__) # ---------------------------------------------------------------------------- # contains the kowledge state of each student. class Knowledge(object): def __init__(self, depgraph, state={}): self.depgraph = depgraph self.state = state # {node: level, node: level, ...} self.current_question = None self.seq = nx.topological_sort(self.depgraph) self.topic = None def get_current_question(self): return self.current_question def get_knowledge_state(self): return self.state # --- generates a new question given the current state def new_question(self): logger.debug('new_question()') if self.current_question is None or self.current_question.get('grade', 0.0) > 0.9999: g = self.depgraph # choose topic, ie, node of the graph # print(g.nodes()) self.topic = random.choice(g.nodes()) # FIXME # print(topic) # choose question from that topic question = random.choice(g.node[self.topic]['factory']) # print(question) self.current_question = question.generate() # print(self.current_question) # self.current_question = g.node[topic]['factory'].generate(ref) self.current_question['start_time'] = datetime.now() return self.current_question # --- checks answer and updates knowledge state # returns current question with correction, time and comments updated def check_answer(self, answer): logger.debug(f'check_answer("{answer}")') question = self.current_question if question is not None: question['finish_time'] = datetime.now() question.correct(answer) # logger.debug(f'check_answer returning') return question