Team Ai
Apppublic

TangibleAI/mathtext-fastapi

sourceHugging Faceagpl-3.0updated 3y agoView on Hugging Face
1likes
math_subtraction_fsm.py58 linesDownload Raw Back to mathtext_fastapi
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]