在没有循环

时间:2018-03-03 12:25:00

标签: python

我试图使用*args打印出一系列简单多项式的系数

我粗略地理解*args是如何工作的,我知道如何使用一个简单的循环来打印出每个系数,但在一个__repr__函数中,它应该只返回一个作为返回值的函数功能,我很困惑如何做到这一点......

class Polynomial:

    def __init__(self, *coefficients):
        self.coeffs = coefficients

    def __repr__(self):
        return "Polynomial( {} )".format(self.coeffs)    

p1 = Polynomial(1, 2, 3)
p2 = Polynomial(3, 4, 3)

print(p1)                               # Polynomial( (1, 2, 3) )
print(p2)                               # Polynomial( (3, 4, 3) )

print的结果显然是在评论之后,尽管我所追求的是这种格式:

1x^2 + 2x + 3
3x^2 + 4x + 3

我尝试过以下方法,但我似乎无法做到。

    def __repr__(self):
        # return "Polynomial( {}x^2 + {}x + {} )".format(self.coeffs)
        # return "Polynomial( {0}x^2 + {1}x + {2} )".format(self.coeffs)
        # return "Polynomial( {0}x^2 + {1}x + {2} )".format( enumerate(self.coeffs) )

有没有一种巧妙的方法可以在args语句中循环遍历return元素并一次性完成?

2 个答案:

答案 0 :(得分:2)

您也可以使用*中的__repr__语法:

def __repr__(self):
    return "Polynomial( {}x^2 + {}x + {} )".format(*self.coeffs)

但是,如果你想让__repr__调整多项式的次数,你可能需要某种循环:

def __repr__(self):
    degree = len(self.coeffs) - 1
    polystr = ' + '.join('{}x^{}'.format(term, degree-i)
         for i, term in enumerate(self.coeffs))

    return "Polynomial( {} )".format(polystr)

答案 1 :(得分:1)

试试这个(我将系数作为list):

exp = len(self.coeffs)
i = 0
s = ""
while exp > -1:
    s += str(coeffs[i]) + "x^" + str(exp) + " "
    exp -= -1
    i += 1
return s

或者,如果您总是将2作为最高指数,则可以使用*选择所有coeffs,如.format(*self.coeffs)