Как вынести выражения из под скобок после чего решить его?

n = "√(9-5)-√(4+5)" Мне надо, чтобы алгоритм выносил 9-5 и 4+5,после чего решал эти два выражения и добавлял их в список. Пример:

root = []

n = "√(9-5)-√(4+5)"

z = "9-5"

n = eval(z)

n = 4

root.append(n)

И точно также с 4+5


Ответы (2 шт):

Автор решения: Zhihar

алгоритм как в прошлой вашей задаче, только ищем не только цифры, но и знаки

а затем полученную строку выполняем - это самый быстрый способ решения выражения иначе надо писать отдельно его парсер

import re

n = "√(9-5)-√(4+5) + 15"

res = [eval(text) for text in re.findall(r'\(([0-9-+]*)\)', n)]

print(res)

правда eval использовать надо на свой страх и риск :)

→ Ссылка
Автор решения: SergFSM

если смущает использование функции eval(), то можно решить так:

from re import findall

n = "√(9-5)-√(4+5) + 15"
d = {
    '+': lambda x,y: x+y,
    '-': lambda x,y: x-y
    }
res = [d[o](int(x), int(y)) for x, o, y in findall(r'\((\d+)(\D+)(\d+)\)', n)]
print(res)  # [4, 9]
→ Ссылка