отделять условия многочлена

У меня есть многочлен и я хочу отделить это в условиях. или же, имея многочлен: "3x^2+x(2-4)-1" я хочу отделить это в: 3x^2,+x(2-4) и -1. Для этого я должен отделять это из-за + и - который он находит исключая тех, которые внутри скобок.

Попробуйте использовать siguente изреки: re.split("[\+|\-][^[\(.*[\+|\-].*\)]]", poly) чтобы это отделять, но я не функционирую.

Мой вопрос: возможно делать с regex или существует какой-то модуль python, который мог бы делать это.

0
задан 06.11.2019, 04:03
2 ответа

Мы можем создавать функцию, чтобы отделять условия многочлена.
Идея состоит в том, чтобы происходить через многочлен и читать все символы один из-за одного (последовательным способом).
И то, что функция делает, эта зависит от которого характера мы читаем в момент.

Мы Нуждаемся в трех изменчивых ключах:

1. terminoActual ( string )

, Когда мы происходим через многочлен, мы сохраняем каждый характер в terminoActual до, сформированной целый термин и это сохраняем в переменной terminos. И потом, мы возобновляем terminoActual, чтобы сохранять новые символы и чтобы находить другой целый термин.

2. условия ( список string )

Это результат функции, сохраняя все условия в многочлене. Контент - как так: ['3x^2','+x(2-4)','-1']

3. numeroParentesis ( integer )

изменчивый Восток подтверждать, ли мы внутри пары скобки. Функционируй как так: если находится один (, добавляют стоимость из-за 1. И если находят ), остается стоимость из-за 1. Так, если numeroParentesis он равен 0, значь, что мы не внутри пары скобки и наоборот.

полезный, когда мы находим операторы (+ или -). Если мы вне скобки, cremos новый термин. По-другому, давайте не будем верить в новый термин.


Код:

def separarTerminos(polinomio:str) -> []:

    # quitar los space
    polinomio = polinomio.replace(' ','')

    terminoActual = ''
    terminos = []
    numeroParentesis = 0

    # Por cada caracter en polinomio
    for i in range(len(polinomio)):
        caracterActual = polinomio[i]

        # El primero caracter, siempre se agrega a terminoActual
        if i == 0:
            terminoActual = terminoActual + caracterActual

        # El ultimo caracter
        elif i == len(polinomio) - 1:
            terminoActual = terminoActual + caracterActual
            terminos.append(terminoActual)

        # Otros caracteres
        else:

            # Si se encuentra parentesis, actualizamos el valor de numeroParentesis
            if caracterActual == '(':
                numeroParentesis += 1
                terminoActual = terminoActual + caracterActual
            elif caracterActual == ')':
                numeroParentesis -= 1
                terminoActual = terminoActual + caracterActual

            # Si se encuentra operador '+' o '-'
            elif caracterActual == '+' or caracterActual == '-':

                # Si estamos dentro de parentesis
                if numeroParentesis > 0:
                    terminoActual = terminoActual + caracterActual

                # Si estamos fuera de parentesis, crea un nuevo termino
                else:
                    terminos.append(terminoActual)
                    terminoActual = caracterActual

            # Otros caracteres
            else:
                terminoActual = terminoActual + caracterActual

    return terminos

Может тестировать функцию с этим кодом:

polinomio = '3x^2+x(2-4)-1'

terminos = separarTerminos(polinomio)
for i in terminos:
    print(i)

Результат:

3x^2
+x(2-4)
-1
1
ответ дан 01.12.2019, 12:36

Ты можешь использовать следующую expresiГіn регулировать" ([+-]? [^-+] +)" . Я верю в изящество estГЎ в Вашей простоте, хотя он может быть улучшенным.

относится друг к другу о регулярном выражении, чтобы получать каждое из условий от многочлена (последовательность символов), начальный характер которого был пустой цепью ('') или характер '+' или характер '-', и конечная группа которого символов (не включенный) не содержала ни + ни - . Например '3x^2' или '+3x^2' encajarГ-an в тебе expresiГіn регулировать.

AquГ - ты можешь testearla лучше.

пример с cГіdigo - следующий:

import re

#polinomios para el test
p = "3x^2+x(2-4)-1"
p2 = "5x^3-1x^2+6x+33"

#expresion regular para obtener cada uno de los terminos del polinomio cuyo caracter inicial sea "" o bien +,- y cuyo grupo de caracteres final (no incluido) no contenga ni + ni -
rExpr = "([+-]?[^-+]+)"

pAsList = re.split(rExpr, p)
p2AsList = re.split(rExpr, p2)

#Eliminamos de la lista obtenida los strings vacios
print(list(filter(None,pAsList)))
print(list(filter(None,p2AsList)))
1
ответ дан 01.12.2019, 12:36

Теги

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