Как мне написать решатель уравнения строки в Python? - PullRequest
0 голосов
/ 09 ноября 2010

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

def s_equation(a):
    equal=a.split("=")

Ответы [ 3 ]

4 голосов
/ 09 ноября 2010
left, right = a.split("=")
assert left == right

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

Редактировать: математика побить меня до пунша , хотя я бы рекомендовал использовать ast.literal_eval вместо eval, если вы не доверяете вводу, который получите.

3 голосов
/ 09 ноября 2010

Вы можете использовать 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
0 голосов
/ 09 ноября 2010

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

Для первого (сначала установите 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
...