我试图使用*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
元素并一次性完成?
答案 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)
。