czy jest mozliwość zeby ten string podzielić na substringi
Jasne, możesz na przykład użyć funkcji... dzielącej - split:
parts = text.split(' + ') # ['5x^3', '1x^2', '4x^1', '3']
Albo wyciągnąć części regexem (który wyciągnie wszystko co wygląda jak ax^y):
parts = re.findall(r'(?:(?:\d+)?x\^)?\d+', text) # ['5x^3', '1x^2', '4x^1', '3']
Można też spróbować od razu wyciągnąć komponenty regexem - ale osobiście bym się wstrzymał, bo w "x^2" z lewej jest "ukryte" 1, którego samymi operacjami na tekście się nie wykryje. Analogicznie, w `2x` jest ukryte "^1".
A propo:
Zamiast tego:
i = W.count("x")
while i >= 0:
# kod
i-=1
Lepiej uzyć pętlę z użyciem `range`:
for i in range(W.count('x')):
# kod