1

__ str __多項式を使用して関数 (別名プリティ プリント)を作成するのに苦労しています。辞書を使用して、力をキーとして、要素を係数として格納します。リストでやったことがありますが、辞書はまだマスターしていません。改善すべき点はありますか?

2 番目の多項式で、最後の定数が定数でない場合、reverse()関数でキーを配置した後、プラスが常にそこにあることがわかります。これを防ぐにはどうすればよいですか? ところで、演算子をオーバーロードしようとしています。これを行った後、、、、および...を実行しますが__ add__、最初にこれを終了します :P__ mul____ sub____ call__

class Polynomial(object):                                
  def __init__(self, coefficients):
    self.coefficients = coefficients

  def __str__(self):
     polyd = self.coefficients
     exponent = polyd.keys()  
     exponent.reverse()          
     polytostring = ' '
     for i in exponent:
        exponent = i
        coefficient = polyd[i]
        if i == 0:
            polytostring += '%s' % coefficient
            break
        polytostring += '%sx^%s + ' % (coefficient, exponent)


     return polytostring


dict1 = {0:1,1:-1}
p1 = Polynomial(dict1)

dict2 = {1:1,4:-6,5:-1, 3:2}
p2 = Polynomial(dict2)

print p1
print p2
4

3 に答える 3

2

あなたの問題を理解していれば、このようなものがうまくいくようです:

def format_term(coef, exp):
    if exp == 0:
        return "%d" % coef
    else:
        return "%dx^%d" % (coef, exp)

def format_poly(d):
    items = sorted(d.items(), reverse=True)
    terms = [format_term(v,k) for (k,v) in items]
    return " + ".join(terms)

dict1 = {0:1,1:-1}
print(format_poly(dict1))    # -1x^1 + 1

dict2 = {1:1,4:-6,5:-1, 3:2}
print(format_poly(dict2))    # -1x^5 + -6x^4 + 2x^3 + 1x^1

(key,val) ペアをキーでソートし、各用語をフォーマットして、用語を 1 つの文字列に結合します。

于 2015-04-06T15:03:15.960 に答える
2
  1. 指数の値が に等しいときにループが終了 (ブレーク) するため、 breakステートメントを削除します。for0

コード:

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


dict1 = {0:1, 1:-1}
p1 = Polynomial(dict1)

dict2 = {1:1, 4:-6, 5:-1, 3:2}
p2 = Polynomial(dict2)

print "First:-", p1
print "Second:-", p2

出力:

$ python poly.py 
First:- 1 + -1x^1
Second:- 1x^1 + 2x^3 + -6x^4 + -1x^5
于 2015-04-06T15:03:19.660 に答える