Как разделить и сохранить числа с плавающей точкой вместе Ruby и Python - PullRequest
0 голосов
/ 23 ноября 2018

Я программирую проверку математических выражений.У меня есть эта строка:

oper = "((234+3.32)+(cos4-sin65))"

Я хочу разделить эту строку, разделив все "()" и операторы минус числа или тригонометрические отношения, чтобы получить этот результат:

oper = ['(', '(', '234', '+', '3.32', ')', '+', '(', 'cos4', '-', 'sin65', ')', ')']

Какбудет ли раскол?

Ответы [ 3 ]

0 голосов
/ 23 ноября 2018

Рубин:

oper = "((234+3.32)+(cos4-sin65))"
re = Regexp.union("(" ,")", "+", "-", /[^()\-+]+/)
p oper.scan(re) # => ["(", "(", "234", "+", "3.32", ")", "+", "(", "cos4", "-", "sin65", ")", ")"]
0 голосов
/ 23 ноября 2018

Есть более простой способ, используйте его:

oper = "((234+3.32)+(cos4-sin65))"
separators=["(",")","+","-"]

def my_split(o, l, j="@"):
    for e in l:
        o = o.replace(e, j+e+j)
    return [e for e in o.split(j) if e]

print(my_split(oper, separators))
0 голосов
/ 23 ноября 2018

Вот мой пример решения.

oper = "((234+3.32)+(cos4-sin65))"
separators = ['(', ')', '+', '-', 'cos', 'sin']

def sep_at_beg(x):
    for separator in separators:
        if len(x) >= len(separator) and x.startswith(separator):
            if separator in ['cos', 'sin']:
                if len(x) > len(separator)+1 and x[len(separator)+1].isdigit():
                    return x[:len(separator)+2]
                return x[:len(separator)+1]
            return separator
    return False

def separate(x):
    return_x = []
    idx = 0
    so_far = ''
    while idx < len(x):
        separator = sep_at_beg(x[idx:])
        if separator:
            if so_far:
                return_x.append(so_far)
            return_x.append(separator)

            so_far = ''
            idx += len(separator)
        else:
            so_far += x[idx]
            idx += 1
    if so_far:
        return_x.append(so_far)
    return return_x

oper = separate(oper)
print(oper)

Выходы:

['(', '(', '234', '+', '3.32', ')', '+', '(', 'cos4', '-', 'sin65', ')', ')']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...