Как достать определённую часть строки и поместить её в переменную?
Допустим, у меня есть квадратное уравнение, заданное ввиде строки:
"ax^2+bx+c=0"
Как я могу рассчитать дискриминант этого уравнения, при том условии, что a, b и c могут быть любыми (одно-/двух-/трёх- и т.д. -значными) числами?
Пожалуйтса, покажите как можно достать ту часть строки, которая, например, находится между +/- и переменной x и записать её в переменную b?
Ответы (3 шт):
Можно регуляркой вытащить. Результатом будет 3 строки, которые приведем к числам через map + float
Для вещественных чисел в строке нужно будет усложнить регулярку, т.к. \d ищет только символы 0-9. Для этого (-?\d+) нужно заменить на (-?\d+(?:\.\d+)?), тогда регулярка найдет и числа с точкой вида 123.456
Например:
import re
pattern = re.compile(r"(-?\d+)x\^2\+(-?\d+)x\+(-?\d+)=0")
m = pattern.search("123x^2+456x+789=0")
print(m.groups())
# ('123', '456', '789')
a, b, c = m.groups()
print(a, b, c)
# 123 456 789
a, b, c = map(float, m.groups())
print(a, b, c)
# 123.0 456.0 789.0
можно разделить строку по 'x'
equation = '-13x^2+42x+111=0'
members = equation.split('x')
['-13', '^2+42', '+111=0']
удалить лишнее
a = members[0]
b = members[1].replace('^2', '')
c = members[2].replace('=0', '')
>>> a, b, c
('-13', '+42', '+111')
и преобразовать к float (int)
>>> a, b, c = float(a), float(b), float(c)
>>> a, b, c
(-13.0, 42.0, 111.0)
Создаешь паттерн, который находит в строке знаки "+ и -"
pattern = re.compile(r"-|\+")
Далее помещаешь элементы, которые находятся между знаками "+-" в список с помощью генератора списков
ls = [i for i in pattern.split(str)]