2016-04-01 6 views
0

私はPythonの初心者です。私はPython Rectangleオブジェクトクラスを作成する必要があります。そのオブジェクトクラスを呼び出すと、コーナーの座標を印刷することができます。私も同様に__str__を追加するように言われたコーナー座標を印刷できるPython Rectangleオブジェクトクラスを作成する

<__main__.Rectangle instance at 0x02F20030> 

が、その後私が手::私が言う私のコードを実行しようとすると、私は問題を抱えています

TypeError: __str__ returned non-string (type int) 

すべてのヘルプは、おかげでいただければ幸いです!

class Rectangle: 
    def __init__(self, topLeft, topRight, bottomLeft, bottomRight): 
     self.tL = topLeft 
     self.tR = topRight 
     self.bL = bottomLeft 
     self.bR = bottomRight 
    def perim(self): 
      return (2 * (self.tL + self.tR)) + (2 * (self.bL + self.bR)) 
    def area(self): 
      return (self.tL + self.tR) * (self.bL + self.bR) 
    def position(self): 
     return self.tL 
     return self.tR 
     return self.bL 
     return self.bR 
def __repr__(self): 
     return self.tL 
     return self.tR 
     return self.bL 
     return self.bT 


r1 = Rectangle (5, 5, 10, 10) 
print r1 

答えて

0

これを試してみてください。

def __repr__(self): 
     return 'tL = '+str(self.tL) + ', tR ='+ str(self.tR)+', bL ='+ str(self.bL) + ', bR =' +str(self.bR) 

ノート:

  • コード内であなたの関数のみself.bT(最後の)を返し、一つだけreturn文が関数内で実行させます。
  • 提供コードdef __repr__(self)はインデントされていません。
  • 長方形を定義するのに4ポイントは必要ありません。
  • あなたの四角形の角は、単に整数でなければならず、2つの座標(x、y)のシーケンスでなければなりません。例えば、(3,7)はポイントで、2つの整数タプルまたはリストとしてポイントを実装します。

編集:もちろん

class Rectangle: 
    def __init__(self, tL, bR): #tL and bR should be passed as tuples 
     self.tL = tL 
     self.tR = (bR[0], tL[1]) #access tuple elements with tuple[index] 
     self.bL = (bR[1], tL[0]) 
     self.bR = bR 

     self.width = bR[0]- tL[0] 
     self.height = bR[1] - tL[1] 
    def area(self): 
     #get area 
     #... 
    def perim(self): 
     #get perim 
     #... 

r1 = Rectangle((5,5), (30, 20)) 
print r1.tL #output (5, 5) 
print r1.tR #output (30, 5) 
print r1.width #output 25 
print r1.area() #output 375 

あなたが代わりにその時点classを作成することができ、その後、あなたが渡す: OPは、ここではデカルト座標で動作するようにあなたの__init__方法を変更する方法ですが、尋ねて2つのPointから__init__までの長方形を定義します。

私はあなたを助けたと思います!

+0

デカルト座標を受け入れるにはどうすればよいですか?タプルやリストをr1 = Rectangle(..)に挿入しようとすると、引数エラーメッセージが表示されます。 –

+0

@MaryKate私はそれを含む私の答えを編集しました、それが助けられたら私の答えを受け入れてください。 –

0

まず、関数は複数のreturn文を持つことはできません。

また、def __repr__(self):は正しくインデントされません(Rectangleクラスに属します)。

よりも__str__が好きかもしれません。詳細はhttps://docs.python.org/2/reference/datamodel.html#object.reprを参照してください。

class Rectangle: 
    def __init__(self, topLeft, topRight, bottomLeft, bottomRight): 
     self.tL = topLeft 
     self.tR = topRight 
     self.bL = bottomLeft 
     self.bR = bottomRight 
    def perim(self): 
     return (2 * (self.tL + self.tR)) + (2 * (self.bL + self.bR)) 
    def area(self): 
     return (self.tL + self.tR) * (self.bL + self.bR) 
    def position(self): 
     return (self.tL, self.tR, self.bL, self.bR) 
    def __str__(self): 
     return "Rectangle(%s, %s, %s, %s)" % (self.tL, self.tR, self.bL, self.bR) 

r1 = Rectangle (5, 5, 10, 10) 
print r1 
print "Perimeter: %s" % r1.perim() 
print "Area: %s" % r1.area() 
print "Position: (%s, %s, %s, %s)" % r1.position() 
関連する問題