Зачем нужен генератор случайных задач?
Если вы когда‑нибудь задавали ученикам или студентам простые арифметические задачи, вы знаете, как быстро они начинают повторяться. Случайный генератор make_problems позволяет получать новые вариации задач за секунды, экономя время на подготовку материалов.
Как работает функция make_problems?
Функция принимает два параметра:
- n — количество задач, которые нужно сгенерировать.
- seed (по умолчанию 0) — стартовое значение для генератора случайных чисел, обеспечивающее воспроизводимость.
Внутри используется объект random.Random, а не глобальная функция random. Это хорошая практика: вы контролируете генерацию случайных чисел и не влияете на остальной код.
Разбор четырёх типовых шаблонов
Каждая задача выбирается случайно из списка шаблонов:
- discount — расчёт цены со скидкой.
- travel — суммарный путь автомобиля.
- wallet — остаток денег после покупок.
- chain — простая последовательность арифметических операций.
Для каждого шаблона задаются диапазоны параметров, например, цена единицы товара может быть 40, 60, 80 или 120 рублей, а процент скидки — 10, 20, 25 или 50 %.
Пример работы кода
Ниже показан минимальный пример, который генерирует 12 задач для обучения и 6 задач для проверки:
all_problems = make_problems(18, seed=42)
random.Random(1).shuffle(all_problems)
trainset = all_problems[:12]
valset = all_problems[12:]
print(f"Dataset: {len(trainset)} train / {len(valset)} val problems")
Такой подход удобно использовать в автоматизированных системах проверки или в Jupyter‑ноутбуках.
Как адаптировать под свои нужды
- Добавьте новые типы задач, просто расширив ветку
elif. - Увеличьте диапазоны параметров, чтобы получать более разнообразные задачи.
- Если нужен вывод в формате JSON, замените
out.append({...})наjson.dumps(...). - Для интеграции в веб‑приложение используйте Flask/Django и возвращайте
trainsetкак API‑ответ.
Где взять исходный код
Полный код функции и пример использования размещён на GitHub: github.com/your-repo/random-math-generator. Пользуйтесь, модифицируйте и делитесь!





















