2014-11-23 3 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

+0

두 객체가 곱해질 때 과제를 위해 __mul__ 함수에 새로운 객체를 생성합니다 – user3368956

+0

실제 코드를 게시하십시오. 'Example'은 iterable이 아니기 때문에 ('doodads를 뜻합니다.), 또한 4 개의 원소를 추가했기 때문에 [4]가 없기 때문에 당신이 올린 것은 작동하지 않을 것입니다. 그리고리스트 인덱스는 0을 기준으로합니다. –

답변

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

+0

이 줄에 :'doodads.append (doodads [0] * doodads [4]) #blue하지만 (doodads [0] + doodads [1]),'doodads [0]'(예 :'red ', 5,10) ') 모두 빨간색이므로 제품은 파란색이 아니라 빨간색이어야합니다. – irrelephant

+0

doodads [4]가 DooDad ("green", 2,5)가되고 싶습니다. – user3368956

관련 문제