2014-11-22 3 views
0

이 다항식 클래스를 작성했지만 올바른 결과를 반환하기 위해 mul 이상의 mul을 얻는 데 문제가 있습니다. 그것은 다항식의 최고 및 최저 각도에서 작동하지만 내부 각도에 대한 잘못된 계수를 반환합니다. 나는 이것이 계수의 값을 업데이트하는 방식과 관련이 있다고 생각합니다. 도와주세요. 예 $ X^2 * X $ 및 $ X * X^2 $을 모두 $ X^3 $ 줄 -두 다항식의 제품 파이썬

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 있었다. 이 계수는 추가해야하지만 마지막에 찾은 것을 제외하고는 모두 무시해야합니다. 그래서 두 번째 마지막 줄에 업데이트 할 필요가 : 당신이 (컬렉션 모듈에서)을 defaultdict(int)으로 __init__에 termdict1를 초기화하는 경우

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

당신이 꽤 좋네요 할 수 있습니다 - 위에서 될 것입니다 :

S.termdict[key + k] += value*v 
관련 문제