Как вынести выражения из под скобок после чего решить его?
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]