TangibleAI/mathtext-fastapi
1
1import random2from transitions import Machine3 4 5class MathSubtractionFSM(object):6 states = [7 'quiz_start',8 'quiz_question',9 'quiz_end'10 ]11 12 transitions = [13 ['ask_second_question', 'quiz_start', 'quiz_question'],14 ['ask_next_question', 'quiz_question', 'quiz_question'],15 ['exit', 'quiz_start', 'quiz_end'],16 ['exit', 'quiz_question', 'quiz_end'],17 ]18 19 def __init__(20 self,21 initial_state='quiz_start',22 question_nums=[4, 3],23 initial_student_answer=0,24 ):25 # Instantiate the FSM26 self.machine = Machine(27 model=self,28 states=MathSubtractionFSM.states,29 transitions=MathSubtractionFSM.transitions,30 initial=initial_state31 )32 33 # Instantiate variables necessary for tracking activity34 self.question_nums = question_nums35 self.correct_answer = self.question_nums[0] - self.question_nums[1]36 self.student_answer = initial_student_answer37 self.is_correct_answer = False38 self.response_text = f"What is {self.question_nums[0]} - {self.question_nums[1]}?"39 40 # Define functions to run on transitions41 self.machine.on_enter_quiz_question('generate_math_problem')42 self.machine.on_exit_quiz_question('validate_answer')43 44 def validate_answer(self):45 if self.student_answer == 'exit':46 self.machine.set_state('quiz_end')47 return ["Come back any time!"]48 elif self.correct_answer == self.student_answer:49 self.machine.set_state('quiz_question')50 self.generate_math_problem()51 return ['Great job!', self.response_text]52 else:53 return ["That's not quite right. Try again.", self.response_text]54 55 def generate_math_problem(self):56 self.question_nums = random.sample(range(1, 100), 2)57 self.response_text = f"What is {self.question_nums[0]} - {self.question_nums[1]}"58 self.correct_answer = self.question_nums[0] - self.question_nums[1]