Я пишу сценарий, в котором я пытаюсь обработать разные числа, появляющиеся в выражении «симпй». Чтобы извлечь то, что мне нужно, я использую что-то похожее на это: isinstance(expr, sympy.numbers.Float)
, который проверяет, является ли число, появившееся в моем выражении, плавающим. Это работает довольно хорошо для большинства чисел (с плавающей точкой, целых и рациональных чисел). Однако у меня есть некоторые проблемы с отрицательными числами. Например, если я сделаю это:
eq = parse_expr("cos(2*a)+cos(0.5*b)")
srepr(eq)
я получу такой вывод:
Add(cos(Mul(Integer(2), Symbol('a'))), cos(Mul(Float('0.5', precision=53), Symbol('b'))))
, который говорит, что у меня есть целое число, 2 и число с плавающей запятой 0,5, что мне и нужно. Однако, если я сделаю это:
eq = parse_expr("cos(-2*a)+cos(0.5*b)")
srepr(eq)
, я получу этот вывод:
Add(cos(Mul(Integer(2), Symbol('a'))), cos(Mul(Float('0.5', precision=53), Symbol('b'))))
, поэтому в основном знак минус игнорируется. Почему это так, и как я могу заставить его оставить знак минуса и вывести что-то вроде Integer(-2)
вместо Integer(2)
?
Спасибо!