import random from transitions import Machine class MathQuizFSM(object): states = [ 'quiz_start', 'quiz_question', 'quiz_end' ] transitions = [ ['ask_second_question', 'quiz_start', 'quiz_question'], ['ask_next_question', 'quiz_question', 'quiz_question'], ['exit', 'quiz_start', 'quiz_end'], ['exit', 'quiz_question', 'quiz_end'], ] def __init__( self, initial_state='quiz_start', question_nums=[2, 3], initial_student_answer=0, ): # Instantiate the FSM self.machine = Machine( model=self, states=MathQuizFSM.states, transitions=MathQuizFSM.transitions, initial=initial_state ) # Instantiate variables necessary for tracking activity self.question_nums = question_nums self.correct_answer = self.question_nums[0] + self.question_nums[1] self.student_answer = initial_student_answer self.is_correct_answer = False self.response_text = f"What is {self.question_nums[0]} + {self.question_nums[1]}?" # Define functions to run on transitions self.machine.on_enter_quiz_question('generate_math_problem') self.machine.on_exit_quiz_question('validate_answer') def validate_answer(self): if self.student_answer == 'exit': self.machine.set_state('quiz_end') return ["Come back any time!"] elif self.correct_answer == self.student_answer: self.machine.set_state('quiz_question') self.generate_math_problem() return ['Great job!', self.response_text] else: return ["That's not quite right. Try again.", self.response_text] def generate_math_problem(self): self.question_nums = random.sample(range(1,100),2) self.response_text = f"What is {self.question_nums[0]} + {self.question_nums[1]}" self.correct_answer = self.question_nums[0] + self.question_nums[1]