2014-11-22 150 views
0

我写了这个多项式类,但是我在通过加载程序得到正确的结果时遇到问题。它适用于多项式的最高和最低度数,但它会返回内部度数的不正确系数。我认为这与我更新系数值的方式有关。请帮忙。两个多项式的乘积python

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) 

回答

0

多个术语对可能mulitply给予相同功率的结果 - 例如,$ X^2 * X $和$ X * X^2 $均可以得到$ X^3 $。这些系数需要添加,而你实际上忽略了除最后一个找到的所有系数。于是在倒数第二行中的更新需要是:

S.termdict[key+k] = S.termdict.get(key+k, 0) + value*v 

,如果你在__init__初始化termdict1作为defaultdict(int)(从集合模块)可以使这个颇有几分更好 - 上面会变成:

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