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