Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 10, 2010 15:58:32

Enchantner
От:
Зарегистрирован: 2009-02-11
Сообщения: 442
Репутация: +  0  -
Профиль   Отправить e-mail  

Сократить подобные

Пишу себе небольшой решатель формул по учебным нуждам. Формула представляет собой строку вида “(k-1)z - (k-1)x - 5(k3)xz - (k2)z2x”, она разбирается на слагаемые со знаками, и я пытаюсь реализовать просчет некоторых арифметических действий с неизвестными. И возник вот такой вопрос, скорее синтаксический, чем технический - как грамотнее всего сократить подобные? Все слагаемые со знаками у меня лежат в списке в виде объектов, то есть к полям каждого надо обращаться лично:

class Term(object):
def __init__(self, sign, numfactor, coeff, factors):
self.numfactor = numfactor # 1
self.sign = sign # '-'
self.coeff = coeff # '(k2)'
self.factors = factors # ['x', 'z2']
Реально ли привести формулу к нормальному виду, сократив подобные, в один проход? Или, если нет, то как лучше это сделать?
И да, цифирка после ‘z’ - это степень, а не коэффициент, а вот все, что в скобках, это один коэффициент с параметрами. Numfactor - множитель перед коэффициентом k.



Отредактировано (Окт. 10, 2010 16:03:50)

Офлайн

#2 Окт. 10, 2010 21:51:50

Enchantner
От:
Зарегистрирован: 2009-02-11
Сообщения: 442
Репутация: +  0  -
Профиль   Отправить e-mail  

Сократить подобные

Пока решил так: переопределил __lt__ у класса Term и упорядочил по коэффициентам, потом прохожусь в цикле по слагаемым и если у следующего с предыдущим совпадают множители - считаю коэффициент, добавляю к предыдущему элементу и pop()-аю ненужный из массива. Но это не помогает при случаях расстановки через несколько элементов, а проходить на каждом элементе заново весь массив неохота.



Офлайн

#3 Окт. 11, 2010 14:56:22

villager
От:
Зарегистрирован: 2008-11-04
Сообщения: 111
Репутация: +  0  -
Профиль   Отправить e-mail  

Сократить подобные

про вычисление формул я здесь писал, может подойдет…



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version