Бесплатный урок с нашим репетитором!

Узнать подробнее

Новая Школа - онлайн-школа подготовки к ЕГЭ
При поддержке
Посмотреть все вопросы нейросети
Бесплатный пробный урок с репетитором

Узнай больше про репетиторов Новой Школы и запишись на бесплатный пробный урок. Мы проверим твой уровень знаний и составим план обучения по любому предмету и классу

Вопрос от Анонимного юзера 03 сентября 2025 14:05

Дай код

Ответ нейросети

03 сентября 2025 14:05

Ниже пример кода на Python, который генерирует пошаговое решение задач на одну переменную и адаптируется под цель (Понять) и параметры предмета/класса (игнорируются, но есть место под настройки). Он поддерживает уравнения вида:

  • линейные: ax + b = c
  • квадратные: ax^2 + bx + c = 0
  • общие случаи через SymPy (для любых степеней)

Требования: Python 3.x, библиотека SymPy (установить: pip install sympy)

Код:

#!/usr/bin/env python3

-- coding: utf-8 --

""" ГДЗ-ассистент: код для автоматического решения задач на одну переменную с пошаговыми объяснениями.

Параметры:

  • problem: текст задачи (например, "2x + 3 = 7" или "x^2 - 5x + 6 = 0")
  • subject, grade: параметры (игнорируются в логике решений, но принимаются для совместимости)
  • goal: "Понять" (детальные шаги) или что-то иное (краткие результаты)

Особенности:

  • поддерживает линейные и квадратные уравнения на одну переменную.
  • если формулировка не линейна/квадратная, используется общие решения через SymPy с кратким выводом.
  • ^ заменяется на ** для корректного распознавания степеней. """

import sympy as sp import argparse from typing import Optional, Tuple, List

def normalize_problem_text(text: str) -> str: # Заменяем снизу ^ на ** для корректной интерпретации как степень return text.replace("^", "**")

def parse_problem(problem_text: str) -> Tuple[str, str]: # Разделяем на левую и правую части вокруг "=" s = problem_text s = normalize_problem_text(s) if "=" in s: left, right = s.split("=", 1) return left.strip(), right.strip() else: # Если "=" нет, считаем левую часть равной 0 return s.strip(), "0"

def solve_linear(lhs_expr, rhs_expr, var, verbose_steps: List[str]) -> Tuple[List[str], Optional[str]]: expr = sp.expand(lhs_expr - rhs_expr) a = expr.coeff(var) b = expr.subs(var, 0)

a_s = sp.simplify(a)
b_s = sp.simplify(b)

verbose_steps.append(f"Левая часть перенесена без изменений: {lhs_expr} - {rhs_expr} = 0")
verbose_steps.append(f"Соберём коэффициенты по переменной {var}: {a_s}*{var} + {b_s} = 0")

if a_s == 0:
    if b_s == 0:
        verbose_steps.append("Получилось 0 = 0 → бесконечно много решений (любое значение переменной).")
        return verbose_steps, "Ответ: бесконечно много решений."
    else:
        verbose_steps.append("Получилось 0*x + b = 0 при b != 0 → решений нет.")
        return verbose_steps, "Ответ: нет решений."
else:
    x_val = -b_s / a_s
    verbose_steps.append(f"Разделим обе части на коэффициент при {var}: {var} = -({b_s})/{a_s} = {sp.simplify(x_val)}")
    return verbose_steps, f"Ответ: {var} = {sp.simplify(x_val)}"

def solve_quadratic(lhs_expr, rhs_expr, var, verbose_steps: List[str]) -> Tuple[List[str], Optional[str]]: expr = sp.expand(lhs_expr - rhs_expr) poly = sp.Poly(expr, var) a, b, c = poly.all_coeffs() # ожидается [a, b, c] для degree 2 verbose_steps.append(f"Уравнение приведено к квадратному виду: {a}{var}^2 + {b}{var} + {c} = 0")

D = sp.simplify(b**2 - 4*a*c)
verbose_steps.append(f"Дискриминант D = {D}")
sqrtD = sp.sqrt(D)
x1 = (-b + sqrtD) / (2*a)
x2 = (-b - sqrtD) / (2*a)
verbose_steps.append(f"Корни: x1 = (-{b} + sqrt(D)) / (2*{a}) = {sp.simplify(x1)}; "
                     f"x2 = (-{b} - sqrt(D)) / (2*{a}) = {sp.simplify(x2)}")
return verbose_steps, f"Ответ: x = {sp.simplify(x1)} или x = {sp.simplify(x2)}"

def solve_general(problem_text: str, var, verbose_steps: List[str]) -> Tuple[List[str], Optional[str]]: # Общий метод: использовать sympy.solve для уравнения lhs = rhs lhs, rhs = parse_problem(problem_text) try: left_expr = sp.sympify(lhs) right_expr = sp.sympify(rhs) eq = sp.Eq(left_expr, right_expr) sols = sp.solve(eq, var) verbose_steps.append(f"Общее решение с использованием SymPy: {sols}") return verbose_steps, f"Ответ: {sols}" except Exception as e: verbose_steps.append(f"Ошибка общего решения: {e}") return verbose_steps, None

def solve_problem(problem_text: str, subject: Optional[str] = None, grade: Optional[str] = None, goal: str = "Понять") -> str: # Подготовка переменной problem = problem_text.strip() problem_norm = normalize_problem_text(problem)

# Определяем переменную
left, right = parse_problem(problem_norm)
# Определяем переменные, используемые в выражениях
combined = set()
try:
    left_expr = sp.sympify(left)
    right_expr = sp.sympify(right)
    combined.update(left_expr.free_symbols)
    combined.update(right_expr.free_symbols)
except Exception:
    pass

if len(combined) > 0:
    var = sorted(list(combined), key=lambda s: str(s))[0]
else:
    var = sp.Symbol('x')

# Генерация шагов
steps = []
answer = None

try:
    lhs_expr = sp.sympify(left)
    rhs_expr = sp.sympify(right)
except Exception as e:
    return f"Не удалось распознать выражения: {e}"

# Степ-логика по степени уравнения
expr = sp.expand(lhs_expr - rhs_expr)
deg = sp.Poly(expr, var).degree()

if deg == 1:
    steps, answer = solve_linear(lhs_expr, rhs_expr, var, steps)
elif deg == 2:
    steps, answer = solve_quadratic(lhs_expr, rhs_expr, var, steps)
else:
    steps, answer = solve_general(problem_norm, var, steps)

# Формат вывода в строку (пошагово)
# В зависимости от цели можно делать более подробное или краткое
if goal and goal.lower() == "понять":
    return "\n".join(steps + [""] + [answer if answer else "Не удалось вычислить решение."])
else:
    # кратко: только ответ
    return str(answer)

def main(): parser = argparse.ArgumentParser(description="ГДЗ-ассистент: решение одной переменной с пошаговыми объяснениями.") parser.add_argument("--problem", required=True, help="Формулировка задачи, например: '2x + 3 = 7' или 'x^2 - 5x + 6 = 0'") parser.add_argument("--subject", default=None, help="Предмет (не обязателен)") parser.add_argument("--grade", default=None, help="Класс (не обязателен)") parser.add_argument("--goal", default="Понять", help="Цель: 'Понять' для подробного решения или другое для краткого вывода") args = parser.parse_args()

result = solve_problem(args.problem, args.subject, args.grade, args.goal)
print(result)

if name == "main": main()

Использование:

  • Пример 1: python this_script.py --problem "2x + 3 = 7" --goal Понять
  • Пример 2: python this_script.py --problem "x^2 - 5x + 6 = 0" --goal Понять
  • Пример 3: python this_script.py --problem "3x - 9 = 0" (по умолчанию цель — Понять)

Примечания:

  • Требуется установить SymPy: pip install sympy
  • Вводите формулировку без пробелов или с ними; код обрабатывает пробелы.
  • При использовании степеней используйте **, напр. x^2 будет некорректно обработано без замены; этот скрипт выполняет замену ^ на **.

Задай свой вопрос

Напиши любую задачу или вопрос, а нейросеть её решит

Похожие вопросы 15

Бесплатно Мобильное приложение ГДЗ
Мобильное приложение ГДЗ

Задавай вопросы искуcственному интеллекту текстом или фотографиями в приложении на iPhone или Android

qr-codegoogle-playapp-store

Саша — ассистент в телеграмме

дай код
Ниже пример кода на Python, который генерирует пошаговое решение задач на одну переменную и адаптируется под цель (Понять) и параметры предмета/класса (игнорируются, но есть место под настройки). Он поддерживает уравнения вида: - линейные: ax + b = c - квадратные: ax^2 + bx + c = 0 - общие случаи через SymPy (для любых степеней) Требования: Python 3.x, библиотека SymPy (установить: pip install sympy) Код: #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ ГДЗ-ассистент: код для автоматического решения задач на одну переменную с пошаговыми объяснениями. Параметры: - problem: текст задачи (например, "2x + 3 = 7" или "x^2 - 5x + 6 = 0") - subject, grade: параметры (игнорируются в логике решений, но принимаются для совместимости) - goal: "Понять" (детальные шаги) или что-то иное (краткие результаты) Особенности: - поддерживает линейные и квадратные уравнения на одну переменную. - если формулировка не линейна/квадратная, используется общие решения через SymPy с кратким выводом. - ^ заменяется на ** для корректного распознавания степеней. """ import sympy as sp import argparse from typing import Optional, Tuple, List def normalize_problem_text(text: str) -> str: # Заменяем снизу ^ на ** для корректной интерпретации как степень return text.replace("^", "**") def parse_problem(problem_text: str) -> Tuple[str, str]: # Разделяем на левую и правую части вокруг "=" s = problem_text s = normalize_problem_text(s) if "=" in s: left, right = s.split("=", 1) return left.strip(), right.strip() else: # Если "=" нет, считаем левую часть равной 0 return s.strip(), "0" def solve_linear(lhs_expr, rhs_expr, var, verbose_steps: List[str]) -> Tuple[List[str], Optional[str]]: expr = sp.expand(lhs_expr - rhs_expr) a = expr.coeff(var) b = expr.subs(var, 0) a_s = sp.simplify(a) b_s = sp.simplify(b) verbose_steps.append(f"Левая часть перенесена без изменений: {lhs_expr} - {rhs_expr} = 0") verbose_steps.append(f"Соберём коэффициенты по переменной {var}: {a_s}*{var} + {b_s} = 0") if a_s == 0: if b_s == 0: verbose_steps.append("Получилось 0 = 0 → бесконечно много решений (любое значение переменной).") return verbose_steps, "Ответ: бесконечно много решений." else: verbose_steps.append("Получилось 0*x + b = 0 при b != 0 → решений нет.") return verbose_steps, "Ответ: нет решений." else: x_val = -b_s / a_s verbose_steps.append(f"Разделим обе части на коэффициент при {var}: {var} = -({b_s})/{a_s} = {sp.simplify(x_val)}") return verbose_steps, f"Ответ: {var} = {sp.simplify(x_val)}" def solve_quadratic(lhs_expr, rhs_expr, var, verbose_steps: List[str]) -> Tuple[List[str], Optional[str]]: expr = sp.expand(lhs_expr - rhs_expr) poly = sp.Poly(expr, var) a, b, c = poly.all_coeffs() # ожидается [a, b, c] для degree 2 verbose_steps.append(f"Уравнение приведено к квадратному виду: {a}*{var}^2 + {b}*{var} + {c} = 0") D = sp.simplify(b**2 - 4*a*c) verbose_steps.append(f"Дискриминант D = {D}") sqrtD = sp.sqrt(D) x1 = (-b + sqrtD) / (2*a) x2 = (-b - sqrtD) / (2*a) verbose_steps.append(f"Корни: x1 = (-{b} + sqrt(D)) / (2*{a}) = {sp.simplify(x1)}; " f"x2 = (-{b} - sqrt(D)) / (2*{a}) = {sp.simplify(x2)}") return verbose_steps, f"Ответ: x = {sp.simplify(x1)} или x = {sp.simplify(x2)}" def solve_general(problem_text: str, var, verbose_steps: List[str]) -> Tuple[List[str], Optional[str]]: # Общий метод: использовать sympy.solve для уравнения lhs = rhs lhs, rhs = parse_problem(problem_text) try: left_expr = sp.sympify(lhs) right_expr = sp.sympify(rhs) eq = sp.Eq(left_expr, right_expr) sols = sp.solve(eq, var) verbose_steps.append(f"Общее решение с использованием SymPy: {sols}") return verbose_steps, f"Ответ: {sols}" except Exception as e: verbose_steps.append(f"Ошибка общего решения: {e}") return verbose_steps, None def solve_problem(problem_text: str, subject: Optional[str] = None, grade: Optional[str] = None, goal: str = "Понять") -> str: # Подготовка переменной problem = problem_text.strip() problem_norm = normalize_problem_text(problem) # Определяем переменную left, right = parse_problem(problem_norm) # Определяем переменные, используемые в выражениях combined = set() try: left_expr = sp.sympify(left) right_expr = sp.sympify(right) combined.update(left_expr.free_symbols) combined.update(right_expr.free_symbols) except Exception: pass if len(combined) > 0: var = sorted(list(combined), key=lambda s: str(s))[0] else: var = sp.Symbol('x') # Генерация шагов steps = [] answer = None try: lhs_expr = sp.sympify(left) rhs_expr = sp.sympify(right) except Exception as e: return f"Не удалось распознать выражения: {e}" # Степ-логика по степени уравнения expr = sp.expand(lhs_expr - rhs_expr) deg = sp.Poly(expr, var).degree() if deg == 1: steps, answer = solve_linear(lhs_expr, rhs_expr, var, steps) elif deg == 2: steps, answer = solve_quadratic(lhs_expr, rhs_expr, var, steps) else: steps, answer = solve_general(problem_norm, var, steps) # Формат вывода в строку (пошагово) # В зависимости от цели можно делать более подробное или краткое if goal and goal.lower() == "понять": return "\n".join(steps + [""] + [answer if answer else "Не удалось вычислить решение."]) else: # кратко: только ответ return str(answer) def main(): parser = argparse.ArgumentParser(description="ГДЗ-ассистент: решение одной переменной с пошаговыми объяснениями.") parser.add_argument("--problem", required=True, help="Формулировка задачи, например: '2x + 3 = 7' или 'x^2 - 5x + 6 = 0'") parser.add_argument("--subject", default=None, help="Предмет (не обязателен)") parser.add_argument("--grade", default=None, help="Класс (не обязателен)") parser.add_argument("--goal", default="Понять", help="Цель: 'Понять' для подробного решения или другое для краткого вывода") args = parser.parse_args() result = solve_problem(args.problem, args.subject, args.grade, args.goal) print(result) if __name__ == "__main__": main() Использование: - Пример 1: python this_script.py --problem "2x + 3 = 7" --goal Понять - Пример 2: python this_script.py --problem "x^2 - 5x + 6 = 0" --goal Понять - Пример 3: python this_script.py --problem "3x - 9 = 0" (по умолчанию цель — Понять) Примечания: - Требуется установить SymPy: pip install sympy - Вводите формулировку без пробелов или с ними; код обрабатывает пробелы. - При использовании степеней используйте **, напр. x^2 будет некорректно обработано без замены; этот скрипт выполняет замену ^ на **.