Python 两个多项式的乘积

Python 两个多项式的乘积,python,Python,我编写了这个多项式类,但在让mul over loader返回正确结果时遇到了一个问题。它适用于多项式的最高和最低度数,但返回的内部度数的系数不正确。我认为这与我更新系数值的方式有关。请帮忙 class Polynomial: def __init__(self, *termpairs): termdict1={} for i in termpairs: termdict1[i[1]]=i[0] self.termdict = termdict

我编写了这个多项式类,但在让mul over loader返回正确结果时遇到了一个问题。它适用于多项式的最高和最低度数,但返回的内部度数的系数不正确。我认为这与我更新系数值的方式有关。请帮忙

class Polynomial:
def __init__(self, *termpairs):
    termdict1={}
    for i in termpairs:
        termdict1[i[1]]=i[0]      
    self.termdict = termdict1
def __str__(self):
    k = sorted(self.termdict, reverse = True)
    v = 0
    x = ''
    for i in k:
        if i == 0:  
                x += str(self.termdict.get(i))
        elif i == 1:
            if self.termdict.get(i) > 0:
                x+=' + '
                x+=str(self.termdict.get(i))
                x+='x'
            else:
                x+= ' - '
                x+=str(abs(self.termdict.get(i)))
                x+='x'
        elif i > 1:
            if self.termdict.get(i) > 0:
                x+=' + '
                x+=str(self.termdict.get(i))
                x+='x^'
                x+=str(i)
            else:
                x+=' - '
                x+=str(abs(self.termdict.get(i)))
                x+='x^'
                x+=str(i)
        elif i < 0:
            x+=' - '
            x+=str(abs(self.termdict.get(i)))
            x+='x^'
            x+=str(i)
    if x[1] == '+':
        return(x[3:])
    else:
        return(x) 

def degree(self):
    k = sorted(self.termdict, reverse = True)
    return(k[0])
def evaluate(self,x):
    final = 0
    for k,v in self.termdict.items():
        print(k,v)
        final += v*(x**k)
    return(final)
def addterm(self,x,y):
    if y in self.termdict.keys():
        self.termdict[y] = (self.termdict.get(y) + x)
    else:
        self.termdict[y] = x
    return(self.termdict)
def removeterm(self,x):
    if x in self.termdict.keys():
        del self.termdict[x]
    return(self.termdict)
def scale(self,x):
    for k in self.termdict.keys():
        self.termdict[k] = (self.termdict.get(k) * x)  
    return(self.termdict)
def __add__(self,other):
    New = Polynomial()
    for k,v in self.termdict.items():
        New.addterm(v,k)
    for k,v in other.termdict.items():
        New.addterm(v,k)
def __sub__(self,other):
    s = Polynomial()
    x = Polynomial()
    for k,v in self.termdict.items():
        s.addterm(v,k)
    print(s.termdict)
    for key in other.termdict.keys():
        s.removeterm(key)
    for k,v in other.termdict.items():
        x.addterm(v,k)
    print(x.termdict)
    for key in self.termdict.keys():
        x.removeterm(key)
    for k,v in x.termdict.items():
        s.addterm(-1*v,k)
    print(s.termdict)  
    return(s.termdict)
def __mul__(self,other):
    S = Polynomial()
    for k,v in other.termdict.items():
        for key, value in self.termdict.items():  
                S.termdict[key+k]=(value*v)
    print(S)

多个项对可以叠加以在结果中提供相同的幂-例如,$x^2*x$和$x*x^2$都提供$x^3$。需要添加这些系数,而实际上忽略了除最后一个之外的所有系数。因此,最后第二行中的更新需要:

S.termdict[key+k] = S.termdict.get(key+k, 0) + value*v
如果您在uuu init_uuuuuuu中将termdict1初始化为collections模块中的DefaultDictent,则可以使这一点变得更好—上面的内容将变为:

S.termdict[key + k] += value*v