2014-11-23 45 views
1

當我運行我的代碼時,我一直得到錯誤的結果。我試圖獲得差異,並設置爲對象的新顏色,如果兩個對象顏色不相等。如果兩種顏色相等,我用這種顏色作爲新顏色。我不知道我錯過了什麼。得到錯誤的結果Python

代碼:

class DooDad : 
    _serialNumber = 1000 

    def __init__(self, color, weight, value): 
     self._color = color 
     self._weight = weight 
     self._value = value 
     DooDad._serialNumber = DooDad._serialNumber + 1 
     self._serialNumber = DooDad._serialNumber 

    def getColor(self): 
     return self._color 

    def getWeight(self): 
     return self._weight 

    def getValue(self): 
     return self._value 

    def getSerialNumber(self): 
     return self._serialNumber 

    def __add__(self, other): 
     if self._serialNumber - other._serialNumber == 1 or other._serialNumber - self._serialNumber == 1: 
      newValue = self._value * other._value 
     else: 
      newValue = self._value + other._value 

     maxWeight = max(self._weight, other._weight) 
     leftColor = self._color 
     return DooDad(self._color, maxWeight, newValue) 

    def __sub__(self, other): 
     leftColor = self._color 
     rightWeight = other._weight 
     minValues = min(self._value, other._value) 
     return DooDad(leftColor, rightWeight, minValues) 

    def __mul__(self, other): 
     maxWeight = max(self._weight, other._weight) 
     avgValue = (self._value + other._value)/2 
     if self._color != other._color: 
      colorNotIn = self._notInEither(self._color, other._color) 
      return DooDad(colorNotIn, maxWeight, avgValue) 

     return DooDad(self._color, maxWeight, avgValue)  


    def _notInEither(self, color1, color2): 
     allColors = {"red", "blue", "green"} 
     colors = {color1, color2} 
     print(colors) 
     colorNotIn = allColors.difference(colors) 
     return "".join(colorNotIn) 


    def __repr__(self): 
     return " %s DooDad weighing %.0f grams. Value = %f points. S/N= %i" % (self._color, self._weight, self._value, self._serialNumber) 


if __name__ == "__main__": 
    doodads = [] 
    doodads.append(DooDad("red",5,10)) 
    doodads.append(DooDad("red",8,9)) 
    doodads.append(DooDad("blue",20,15)) 
    doodads.append(DooDad("green",2,5)) 
    doodads.append(doodads[0] + doodads[1]) 
    doodads.append(doodads[2] + doodads[0]) 
    doodads.append(doodads[3] - doodads[1]) 
    doodads.append(doodads[1] - doodads[3]) 
    doodads.append(doodads[0] * doodads[1]) 
    doodads.append(doodads[0] * doodads[2]) 
    doodads.append(doodads[0] * doodads[4]) #blue but i get red 
    doodads.append(doodads[3] * doodads[4]) #red but i get blue 



    for doodad in doodads: 
     print(doodad) 
+0

你想用'例[0] *例[4]'來實現呢? – syntagma 2014-11-23 23:36:11

+0

當兩個對象相乘時它將進行賦值,它會在__mul__函數中創建一個具有規範的新對象 – user3368956 2014-11-23 23:38:29

+0

請發佈您的實際代碼。你發佈的內容不起作用,因爲'Example'不是可迭代的(你的意思是'裝飾品)',也沒有[4],因爲你只添加了4個元素,列表索引是基於0的。 – 2014-11-23 23:39:11

回答

0

我覺得你只是測試你的類錯誤的; Example[x]應該是doodads[x]

doodads = [] 
doodads.append(Example("red",5,10)) 
doodads.append(Example("red",8,9)) 
doodads.append(Example("blue",20,15)) 
doodads.append(Example("green",2,5)) 
doodads.append(doodads[0] * doodads[3]) #blue 
doodads.append(doodads[3] * doodads[4]) #red 

輸出:

red weighing 5 grams. Value = 10.000000 points. S/N= 1001 
red weighing 8 grams. Value = 9.000000 points. S/N= 1002 
blue weighing 20 grams. Value = 15.000000 points. S/N= 1003 
green weighing 2 grams. Value = 5.000000 points. S/N= 1004 
blue weighing 5 grams. Value = 7.000000 points. S/N= 1005 
red weighing 5 grams. Value = 6.000000 points. S/N= 1006 
+0

我改變了名字時,我發佈這裏的問題,這是我的部分錯字,但我發佈了完整的代碼在這個問題 – user3368956 2014-11-23 23:42:12

+0

在這一行:'doodads.append(裝飾[0] *裝飾品[4])#blue但我得到紅色'',我們有'裝飾物[0]'(這是'例子(「紅色」,5,10)'')和'裝飾物[4]'(它是'裝飾品[0] +裝飾品[1] ')都是紅色的,所以他們的產品也應該是紅色的,而不是藍色的。 – irrelephant 2014-11-23 23:46:58

+0

我想要裝飾品[4]是DooDad(「綠色」,2,5) – user3368956 2014-11-23 23:49:38