zamiana wielomianu na listę

0

Potrzebuję napisać algorytm który będzie zamieniać mi wielomian na listę. Np.
w(x) = x^2+5x+17 na T(w)=[17,5,1] oraz odwrotnie na W([17,5,1])=x^2+5x+17, oczywiście wielomian może być dowolnej długości. Czy ktoś jest w stanie pomóc? Kod może dokładniej być napisany w SageMath.

0

Ale to prośba o pomoc, czy zlecenie? :)

0

Z listy na napis to banalne, a w drugą stronę:

  • szukasz napisu 'x' (w pętli);
  • to co jest po lewej każdego iksa (licząc do najbliższego +, - lub do końca) jest współczynnikiem, a to co po prawej (także do +, - lub do końca) jest potęgą (poprzedzoną znakiem ^); zamieniasz te podnapisy na liczby i wstawiasz do listy (potęga jest indeksem, a współczynnik wartością);
  • pierwszy przypadek specjalny -- jest x, nie ma potęgi -- wtedy potęga równa się 1;
  • drugi przypadek specjalny -- nie ma x -- więc jest to wyraz wolny, czyli potęga równa 0.
0
koszalek-opalek napisał(a):

Z listy na napis to banalne, a w drugą stronę:

  • szukasz napisu 'x' (w pętli);
  • to co jest po lewej każdego iksa (licząc do najbliższego +, - lub do końca) jest współczynnikiem, a to co po prawej (także do +, - lub do końca) jest potęgą (poprzedzoną znakiem ^); zamieniasz te podnapisy na liczby i wstawiasz do listy (potęga jest indeksem, a współczynnik wartością);
  • pierwszy przypadek specjalny -- jest x, nie ma potęgi -- wtedy potęga równa się 1;
  • drugi przypadek specjalny -- nie ma x -- więc jest to wyraz wolny, czyli potęga równa 0.

z listy na napis udało mi się stworzyć takie coś:
def W(n):
for i in range(len(n)-1,-1,-1):
if(i!=0):
print str(n[i])+"x^"+str(i)+" + ",
if(i==0):
print(n[0])

ale nie bardzo rozumiem w drugą stronę :)

0

Poza formatowaniem kodu, już merytorycznie -- to co robisz, to nie jest przetworzenie na napis, tylko wyświetlenie. Trzeba by to zrobić raczej jakoś tak:

def W(n):
    wynik = ''
    for i in range(len(n)-1,-1,-1):
        if(i!=0):
            wynik += str(n[i])+"x^"+str(i)+" + ",
        if(i==0):
            wynik += str(n[0])
    return wynik

(można to jeszcze ulepszyć, ale bazowałem na Twoim kodzie).

A w drugą stronę? Jak będziesz szukać napisu 'x' w napisie? napis.find(...). Jak wycinać podnapis? napis[...:...]. Jak przerabiać to na liczbę? float(...). Jak wstawić do listy? insert, append lub lista[...] = ... (zależnie od sytuacji).

0
koszalek-opalek napisał(a):

Poza formatowaniem kodu, już merytorycznie -- to co robisz, to nie jest przetworzenie na napis, tylko wyświetlenie. Trzeba by to zrobić raczej jakoś tak:

def W(n):
    wynik = ''
    for i in range(len(n)-1,-1,-1):
        if(i!=0):
            wynik += str(n[i])+"x^"+str(i)+" + ",
        if(i==0):
            wynik += str(n[0])
    return wynik

(można to jeszcze ulepszyć, ale bazowałem na Twoim kodzie).

A w drugą stronę? Jak będziesz szukać napisu 'x' w napisie? napis.find(...). Jak wycinać podnapis? napis[...:...]. Jak przerabiać to na liczbę? float(...). Jak wstawić do listy? insert, append lub lista[...] = ... (zależnie od sytuacji).

wywala mi taki błąd przy twoim kodzie :
TypeError Traceback (most recent call last)
<ipython-input-4-f916e4330ef2> in <module>()
7 wynik += str(n[Integer(0)])
8 return wynik
----> 9 W([Integer(7),Integer(9),Integer(1)])

<ipython-input-4-f916e4330ef2> in W(n)
3 for i in range(len(n)-Integer(1),-Integer(1),-Integer(1)):
4 if(i!=Integer(0)):
----> 5 wynik += str([i])+"x^"+str(i)+" + ",
6 if(i==Integer(0)):
7 wynik += str(n[Integer(0)])

TypeError: cannot concatenate 'str' and 'tuple' objects

0
TypeError                                 Traceback (most recent call last)
<ipython-input-4-f916e4330ef2> in <module>()
      7             wynik += str(n[Integer(0)])
      8     return wynik
----> 9 W([Integer(7),Integer(9),Integer(1)])

<ipython-input-4-f916e4330ef2> in W(n)
      3     for i in range(len(n)-Integer(1),-Integer(1),-Integer(1)):
      4         if(i!=Integer(0)):
----> 5             wynik += str([i])+"x^"+str(i)+" + ",
      6         if(i==Integer(0)):
      7             wynik += str(n[Integer(0)])

TypeError: cannot concatenate 'str' and 'tuple' objects

0
def W(n):
    wynik = ''
    for i in range(len(n)-1,-1,-1):
        if(i!=0):
            wynik += str([i])+"x^"+str(i)+" + "
        if(i==0):
            wynik += str(n[0])
    return wynik
W([7,9,1])

zwróciło takie coś:

'[2]x^2 + [1]x^1 + 7'
0

A, bo to w Sage'u... To jeszcze trzeba zamieniać te liczby Sage'owe na zwykłe i z powrotem -- chyba, nie znam Sage'a...

1 użytkowników online, w tym zalogowanych: 0, gości: 1