2016-03-02 35 views
0

定義一個Python類Polynomial,該類提供了對多項式執行 代數運算的方法。在下面的示例轉錄物 你的類應該表現:Python - 根據參數定義具有可變數量屬性的類

>>> p1 = Polynomial([1, 2, 3]) 
>>> p1 
1.000 z**2 + 2.000 z + 3.000 
>>> p2 = Polynomial([100, 200]) 
>>> p1.add(p2) 
1.000 z**2 + 102.000 z + 203.000 
>>> p1 + p2 
1.000 z**2 + 102.000 z + 203.000 
>>> p1(1) 
6.0 
>>> p1(-1) 
2.0 
>>> (p1 + p2)(10) 
1323.0 
>>> p1.mul(p1) 
1.000 z**4 + 4.000 z**3 + 10.000 z**2 + 12.000 z + 9.000 
>>> p1 * p1 
1.000 z**4 + 4.000 z**3 + 10.000 z**2 + 12.000 z + 9.000 
>>> p1 * p2 + p1 
100.000 z**3 + 401.000 z**2 + 702.000 z + 603.000 
>>> p1.roots() 
[(-1+1.4142135623730947j), (-1-1.4142135623730947j)] 
>>> p2.roots() 
[-2.0] 
>>> p3 = Polynomial([3, 2, -1]) 
>>> p3.roots() 
[-1.0, 0.33333333333333331] 
>>> (p1 * p1).roots() 
Order too high to solve for roots. 

你怎麼會去設計這個功能,所以它可以採取不同等級的多項式。我真的迷失了。

謝謝。

+3

爲什麼您需要可變數量的屬性?使用包含列表的單個屬性。 – Barmar

+0

那我該如何去打印呢? –

+0

http://stackoverflow.com/questions/1535327/python-how-to-print-a-class-or-objects-of-class-using-print – Barmar

回答

1

您可以創建屬性的變量數A類:

class Var: 
    def __init__(self,**kwargs): 
     for attr in kwargs.keys(): 
      self.__dict__[attr] = kwargs[attr] 




v = Var(name="Sam",age=22) 
print(v.__dict__) 
print(v.name) 
print(v.age) 

輸出:

{'age': 22, 'name': 'Sam'} 
Sam 
22 

但是,如果你想傳遞一個列表作爲參數並指定列表中的每個成員類中的一個屬性,其名稱將是一個字母,在每個屬性中升序,您可以執行類似操作:

class Var: 
    def __init__(self,*args): 
     keyVal = 97 
     for attr in args: 
      self.__dict__[chr(keyVal)] = attr 
      keyVal+=1 




v1 = Var(1,2,3) 
print('Attributes of v1',v1.__dict__) 
myList = [4,5] 
v2 = Var(*myList) 
print("attributes of v2",v2.__dict__) 

輸出:

('Attributes of v1', {'a': 1, 'c': 3, 'b': 2}) 
('attributes of v2', {'a': 4, 'b': 5}) 
+0

對不起,我不知道什麼__dict__或kwargs意思是 –

+0

@AndrésRivero:kwargs的意思是關鍵字參數,形式爲name =「Sam」,年齡= 22。這些kwargs可以像字典一樣在函數內部訪問,在這種情況下字典是kwargs。 python字典的簡單解釋在這裏給出:http://www.tutorialspoint.com/python/python_dictionary.htm – YBathia

+0

好的。但是如果我想通過一個列表作爲參數呢?並將該列表的每個成員分配給該類中的一個屬性,該屬性的名稱將成爲一個字母,在每個屬性中升序,如:self.a = 3','self.b = 4'等。 –

相關問題