def generate_puzzle(iterations): solution = SudokuBoard() solution.build() playable = solution.clone() difficult_coefficient = 1 for _ in range(iterations): new_playable = playable.clone() row_num, column_num = random.randrange(9), random.randrange(9) while new_playable.is_cell_empty(row_num, column_num): row_num, column_num = random.randrange(9), random.randrange(9) new_playable.clear_cell(row_num, column_num) solver = SudokuSolver(new_playable) try: solver.solve() playable = new_playable difficult_coefficient = solver.difficult_coefficient except: continue difficult_level = None if difficult_coefficient < DifficultLevel.VERY_EASY.value: difficult_level = DifficultLevel.VERY_EASY elif difficult_coefficient < DifficultLevel.EASY.value: difficult_level = DifficultLevel.EASY elif difficult_coefficient < DifficultLevel.MEDIUM.value: difficult_level = DifficultLevel.MEDIUM elif difficult_coefficient < DifficultLevel.HARD.value: difficult_level = DifficultLevel.HARD elif difficult_coefficient < DifficultLevel.VERY_HARD.value: difficult_level = DifficultLevel.VERY_HARD elif difficult_coefficient < DifficultLevel.MASTER.value: difficult_level = DifficultLevel.MASTER return SudokuGame(playable, solution, difficult_level, difficult_coefficient)