Как в цикле Python обеспечить скобки в результате прохода циклом?

Пишу фрагмент кода вычисления полинома Ньютона. И в ходе прохода циклом for мне необходимо получить 3 слагаемых (и каждое должно быть в скобках):

(x - 30)(x - 20)(x - 10) + (x - 20)*(x - 10) + (x - 10)

И вот когда я иду кодом, получаю такое:

x + (x - 30)(x - 20)(x - 10) + (x - 20)*(x - 10) - 10

Мне важно иметь 3 слагаемых, поскольку в дальнейшем каждое из них в другом цикле будет перемножаться на коэффициенты.

Как добиться?

Код:

from sympy import symbols
x = symbols('x')
dig_list = [10, 20, 30]

poly_0 = x-dig_list[0]
summa = poly_0

for i in range(1, len(dig_list)):
    poly_n = poly_0 * (x-dig_list[i])
    summa += poly_n
    poly_0 = poly_n
print(summa)

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

Автор решения: Stanislav Volodarskiy

sympy.UnevaluatedExpr запрещает SymPy упрощать то что внутри выражения. Я упростил ваш код, первое слагаемое можно не обрабатывать отдельно:

from sympy import symbols, UnevaluatedExpr


x = symbols('x')
dig_list = [10, 20, 30]

sum_ = 0
term = 1

for xi in dig_list:
    term *= UnevaluatedExpr(x - xi)
    sum_ += term

print(sum_)
(x - 10) + (x - 10)*(x - 20) + (x - 10)*(x - 20)*(x - 30)
→ Ссылка