Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №3320621
А
Аноним
28 августа 2025 13:22 · публичный вопрос
А
Аноним

Отправь код

Ответ нейросети
28 августа 2025 13:22

Вот готовый шаблон кода на Python, который принимает текст задачи и формирует подробное решение/пояснение. По умолчанию применяется общий подход средней школы. Если задача содержит простое линейное уравнение с x, код попытается решить его с выводом пошаговых действий.

Сохраните как gdz_solver.py и запускать можно через командную строку, например:

  • python gdz_solver.py --text "Реши уравнение: 2*x+3=11"
  • или python gdz_solver.py --json task.json, где task.json содержит поля: problem_text, subject, klass, goal
#!/usr/bin/env python3
import json
import argparse
import sys

try:
    import sympy as sp
except Exception:
    sp = None  # SymPy не обязателен, но если есть - поможет решить уравнения

class GDZSolver:
    def __init__(self, problem_text, subject=None, klass=None, goal="Понять"):
        self.problem_text = problem_text or ""
        self.subject = subject
        self.klass = klass
        self.goal = goal if goal else "Понять"

    def attempt_equation_solution(self, text):
        """
        Попытка распознать и решить простое линейное уравнение вида
        lhs = rhs для переменной x, если возможно.
        Возвращает строку с пошаговым решением или None.
        """
        if sp is None:
            return None  # SymPy не установлен, продолжим с общим объяснением
        if '=' not in text:
            return None

        left, right = text.split('=', 1)
        left = left.strip()
        right = right.strip()

        x = sp.symbols('x')
        try:
            lhs = sp.sympify(left, locals={'x': x})
            rhs = sp.sympify(right, locals={'x': x})
        except Exception:
            return None  # Не удалось распознать выражения

        f = sp.simplify(lhs - rhs)  # f(x) = lhs - rhs
        try:
            sols = sp.solve(sp.Eq(f, 0), x)
        except Exception:
            sols = None

        if sols is None:
            return None

        steps = []
        steps.append(f"Уравнение: {lhs} = {rhs}")
        steps.append("Перенесём все члены в одну сторону: f(x) = lhs - rhs")
        steps.append(f"f(x) = {lhs} - {rhs} = {f}")
        steps.append("Решаем уравнение f(x) = 0")
        steps.append(f" x ∈ {sols}")
        steps.append(f"Ответ: x = {sols}")
        return "\n".join(steps)

    def compose_header(self, title):
        subject_str = f"Предмет: {self.subject}" if self.subject else "Предмет: не указан"
        class_str = f"Класс: {self.klass}" if self.klass else "Класс: не указан"
        return f"{title}\n{subject_str}\n{class_str}\nЦель: Понять\n"

    def generic_steps(self):
        # Базовый структурированный подход для средней школы
        steps = [
            "1) Прочитайте задачу и выпишите известные данные и то, что нужно найти.",
            "2) Переформулируйте задачу своими словами.",
            "3) Если задача относится к алгебре, попробуйте составить уравнение для искомой величины.",
            "4) Если явного уравнения нет, попробуйте разложить на простые операции: сумма, разность, произведение, частное; применяйте формулы/правила.",
            "5) Решите полученное выражение и найдите ответ.",
            "6) Проверьте ответ в исходной формулировке задачи.",
            "7) Объясните каждый шаг простыми словами."
        ]
        return steps

    def generate_solution(self):
        # Попытка решить уравнение, если задача распознаётся
        eq_steps = self.attempt_equation_solution(self.problem_text)
        if eq_steps:
            header = self.compose_header("Детальное решение (уравнение)")
            return header + "\n" + eq_steps

        # Иначе — общий подробный разбор
        header = self.compose_header("Подробное объяснение")
        steps = self.generic_steps()
        return header + "\n" + "\n".join(steps)

def main():
    parser = argparse.ArgumentParser(description="GDZ helper - генерирует подробное объяснение.")
    parser.add_argument('--json', dest='json_path', help='Путь к JSON-файлу с полями: problem_text, subject, klass, goal')
    parser.add_argument('--text', dest='text', help='Проблема в виде строки')
    args = parser.parse_args()

    problem_text = None
    subject = None
    klass = None
    goal = "Понять"

    if args.json_path:
        with open(args.json_path, 'r', encoding='utf-8') as f:
            data = json.load(f)
        problem_text = data.get('problem_text') or data.get('text') or ""
        subject = data.get('subject')
        klass = data.get('klass') or data.get('class')
        goal = data.get('goal') or "Понять"
    elif args.text:
        problem_text = args.text
        goal = "Понять"
    else:
        print("Укажите ввод: --json путь к файлу JSON или --text строка проблемы.")
        sys.exit(1)

    solver = GDZSolver(problem_text=problem_text, subject=subject, klass=klass, goal=goal)
    solution = solver.generate_solution()
    print(solution)

if __name__ == "__main__":
    main()

Пояснения по использованию:

  • Если задача содержит простое линейное уравнение с переменной x (например, "2*x+3=11"), код вернёт детальное решение с пошаговым объяснением.
  • Если задача не распознаётся как уравнение, код выдаёт общий подробный план-объяснение, рассчитанный на среднюю школу.
  • При отсутствии установленной библиотеки SymPy решение уравнения не будет выполняться, но будет выдано структурированное объяснение.

Если хотите, могу адаптировать код под конкретный предмет и класс, добавить дополнительные шаблоны по геометрии, тригонометрии и т.д.