2014-11-22 152 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