-1

多項式を辞書で表現して、べき乗をキーとして、要素を係数として含めようとしました。関数をオーバーロードしようとしましたが、苦労していたので、関数をオーバーロードして後で適用する__sub __必要があると思います。Python でリストを使ったときは簡単にできましたが、辞書でそれを行う方法がわかりません。したがって、キー(指数)ではなく、すべての要素(係数に-1)を掛けるだけです。その後、関数内で関数を呼び出すにはどうすればよいですか?__neg ____sub ____neg ____sub __

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
4

1 に答える 1

0

単項マイナスだけでnegが呼び出されます。例:

def __sub__(self, other):
    return self + -other

更新
明示的なエラー メッセージとコードが表示されないと、何が間違っていたのかを理解するのは困難ですが、dict のサブクラスとして単純な Poly クラスを作成します。

class Poly(dict):
    def __init__(self, *args, **kwargs):
        super(Poly, self).__init__(*args, **kwargs)
    def __str__(self):
        return "".join(("{:+}x^{}" if e else "{}").format(c, e)
                       for e, c in sorted(self.items()) if c)
    def __add__(self, other):
        return Poly({k: self.get(k, 0) + other.get(k, 0) for k in set(self) | set(other)})
    def __neg__(self):
        return Poly({k: -v for k, v in self.items()})
    def __sub__(self, other):
        return self + -other

>>> x = Poly({0:1, 1:-1})
>>> y = Poly({1:1, 4:-6, 5:-1, 3:2})
>>> print(x+y)
1+2x^3-6x^4-1x^5
>>> print(x-y)
1-2x^1-2x^3+6x^4+1x^5

サブを直接追加するのは本当に難しくありませんが:

    def __sub__(self, other):
        return Poly({k: self.get(k, 0) - other.get(k, 0) for k in set(self) | set(other)})
于 2015-04-07T15:22:29.780 に答える