2013-12-20 3 views
2

Я пишу программу, которая нуждается в пользовательском вводе для полиномиальной функции x. Я использую Tkinter и python 2.5.Парсер уравнения Python

У меня есть метод парсера, который до сих пор принимает введенное уравнение и разбивает его на термины, не отбрасывая знаки.

Я хочу взять каждый термин и разобрать его, чтобы получить кортеж (коэффициент, степень). Например, -2x^3 возвращает (-2,3). Затем я могу добавить их в массив и соответствующим образом манипулировать ими в программе.

Есть ли способ или стандартный модуль, который может это сделать?

Вот начало метода анализа.

def parse(a): 
    termnum=[] 
    terms=[] 
    hi=[] 
    num1=0 
    num=0 
    f=list(a) 

    count=0 
    negative=False 
    coef=0.0 
    deg=0.0 
    codeg=[] 
    for item in f: 
     if (item=='-' or item=='+') and count!=0: 
      termnum.append(count) 
     count+=1 
    for item in termnum: 
     num1=num 
     num=item 
     current='' 
     while num1<num: 
      current=current+f[num1] 
      num1+=1 
     terms.append(current) 
    num1=num 
    num=len(f) 
    current='' 
    while num1<num: 
     current=current+f[num1] 
     num1+=1 
    terms.append(current) 
    print terms 
parse('-x^2+3x+2x^3-x') 

Спасибо! P.S Я не хочу использовать внешние пакеты.

+0

Связанные? http://stackoverflow.com/questions/594266/equation-parsing-in-python –

ответ

1

вы можете использовать регулярные выражения,

import re 

test = '-x^2+3x+2x^3-x' 

for m in re.finditer(r'(-{0,1}\d*)x\^{0,1}(-{0,1}\d*)', test): 
    coef, expn = list(map(lambda x: x if x != '' and x != '-' else x + '1' , 
          m.groups())) 
    print ('coef:{}, exp:{}'.format(coef, expn)) 

выход:

coef:-1, exp:2 
coef:3, exp:1 
coef:2, exp:3 
coef:-1, exp:1 
0

Посмотрите на "рекурсивного спуска парсер". Это канонический метод анализа строк, в котором задействован некоторый приоритет оператора.

Смежные вопросы