J'ai essayé de représenter des polynômes avec des dictionnaires pour contenir les puissances en tant que clés et les éléments en tant que coefficients. J'ai essayé de surcharger la fonction __sub __
mais depuis que je luttais, je devrais juste surcharger la fonction __neg __
et l'appliquer au __sub __
plus tard. Je l'ai fait facilement quand j'ai utilisé des listes pour Python, mais je ne sais pas comment faire avec les dictionnaires. Donc, je voudrais simplement multiplier chaque élément (les coefficients par -1) mais pas les clés (exposants). Après cela, comment puis-je appeler la fonction __neg __
à l'intérieur de la fonction __sub __
?Polynômes en Python, en utilisant des dictionnaires
class Polynomial(object):
def __init__(self, coefficients):
self.coefficients = coefficients
def __str__(self):
polytostring = ' '
for exponent, coefficient in self.coefficients.iteritems():
if exponent == 0:
polytostring += '%s + ' % coefficient
else:
polytostring += '%sx^%s + ' % (coefficient, exponent)
polytostring = polytostring.strip(" + ")
return polytostring
def __add__(self, other):
if isinstance(other, Polynomial):
if max(other.coefficients) > max(self.coefficients):
coefficients = other.coefficients
add_poly = self
else:
coefficients = self.coefficients
add_poly = other
for exponent, coefficient in add_poly.coefficients.iteritems():
if exponent in coefficients:
coefficients[exponent] += add_poly.coefficients[exponent]
else:
coefficients[exponent] = coefficient
else:
coefficients = self.coefficients
sum = Polynomial(coefficients)
return sum
def __neg__(self):
pass
def __sub__(self,other):
pass
dict1 = {0:1, 1:-1}
p1 = Polynomial(dict1)
dict2 = {1:1, 4:-6, 5:-1, 3:2}
p2 = Polynomial(dict2)
print p1
print p2
p3 = p1+p2
print "The sum is:", p3.coefficients
print "The sum in string rep is:", p3
print p1-p2
C'est ce que je faisais quand j'utilisais des listes pour maintenir les coefficients de polynômes, mais dans la classe ci-dessus où je dictionnaires (je l'ai même encore mis dans ma fonction, ça n'a pas marché, on dit "mauvais type d'opérande pour unary-: 'Polynomial' –