2016-04-01 3 views
0

Ich bin neu bei Python. Ich muss eine Python Rectangle Objektklasse erstellen, die, wenn sie aufgerufen wird, die Koordinaten der Ecken sowie die Fläche und den Umfang drucken kann. Ich habe Probleme, wenn ich versuche meinen Code auszuführen, der sagt:Erstellen einer Python-Rectangle-Objektklasse, die die Eckkoordinaten drucken kann

<__main__.Rectangle instance at 0x02F20030> 

wurde mir gesagt, die __str__ als auch hinzufügen, aber dann bekomme ich:

TypeError: __str__ returned non-string (type int) 

Jede Hilfe würde geschätzt, danke!

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 

Antwort

0

versuchen Sie dies:

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

Hinweise:

  • machen nur eine return-Anweisung in einer Funktion ausführen, in Ihrem Code nur Ihre Funktion gibt self.bT (die letzten).
  • Im angegebenen Code def __repr__(self) ist nicht eingerückt.
  • Sie brauchen nicht 4 Punkte, um ein Rechteck zu definieren.
  • Ihre Rectangle Ecken sollten nicht nur ganze Zahlen sein, sie müssen Sequenzen von zwei Koordinaten sein (x, y) zum Beispiel (3, 7) ist ein Punkt, implementieren Sie einen Punkt als 2 ganze Tupel oder Liste.

edit: wie die OP gefragt, hier ist, wie Sie Ihre __init__ Methode ändern kartesisch zu arbeiten:

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 

natürlich Sie class statt, die einen Punkt erstellen, und Sie dann passieren zwei Point s bis __init__, um das Rechteck zu definieren.

Ich hoffe das hat dir geholfen!

+0

Wie bekomme ich meinen Code, um kartesische Koordinaten zu akzeptieren? Wenn ich versuche, Koordinaten als Tupel oder Listen in mein r1 = Rectangle (..) einzufügen, bekomme ich eine Argument-Fehlermeldung. –

+0

@MaryKate Ich habe meine Antwort bearbeitet, um sie einzuschließen, bitte akzeptiere meine Antwort, wenn sie geholfen hat. –

0

Zunächst können Funktionen nicht mehr als eine Return-Anweisung haben.

Außerdem ist def __repr__(self): nicht korrekt eingerückt (es gehört zur Rectangle-Klasse).

Sie könnten __str__ über __repr__ bevorzugen, siehe für weitere Details.

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() 
Verwandte Themen