Как написать решатель уравнений строковых уравнений в Python?

StackOverflow https://stackoverflow.com/questions/4135105

Вопрос

Заранее спасибо! Я пишу программу, чтобы проверить, если a это правда, а затем вернуть истину или ложь. Мне нужно разделить его на равном знаке, а затем проверить, равна ли 1-й элемент в списке вторым элементом и VISE-versa. Вот что у меня есть до сих пор:

def s_equation(a):
    equal=a.split("=")
Это было полезно?

Решение

Вы можете использовать eval () для оценки каждой части уравнения:

def s_equation(a):
    left, right = a.split('=')
    return eval(left) == eval(right)

Некоторые тесты:

>>> s_equation('1+1+1=3')
True
>>> s_equation('2*2=8')
False

Другие советы

left, right = a.split("=")
assert left == right

Вам нужно будет дать нам больше деталей, чем это, если вы хотите полезный ответ. Вы пытаетесь написать полную компьютерную систему алгебры (например, Mathematica)? Это проект Biiiiig, который уже делался несколько раз. Подумайте о том, чтобы использовать что -то вроде Sage.

РЕДАКТИРОВАТЬ: Математика победил меня до удара, хотя я бы порекомендовал использовать ast.literal_eval вместо eval Если вы не доверяете вводу, вы получите.

Вы действительно не даете достаточно информации, чтобы хорошо ответить на ваш вопрос. Вы хотите проверить это как личность (т.е. тестирование алгебры) или как мгновенное равенство?

Для первого, (сначала установите Sympy):

import sympy

def s_equation(a):
    x = sympy.Symbol('x')
    y = sympy.Symbol('y')
    left, right = a.split('=')
    return eval (left + '==' + right)

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

s_equation('x+x = x*2')
#True
s_equation('x+y**2 = y+x**2')
#False
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top