创建一个可以打印角坐标的 python 矩形对象 class
Creating a python Rectangle object class that can print the corner coordinates
我是 python 的新手。我需要创建一个 python Rectangle
对象 class ,当调用它时可以打印角的坐标以及面积和周长。当我尝试 运行 我的代码时遇到问题:
<__main__.Rectangle instance at 0x02F20030>
有人告诉我也要添加 __str__
但后来我得到:
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
试试这个:
def __repr__(self):
return 'tL = '+str(self.tL) + ', tR ='+ str(self.tR)+', bL ='+ str(self.bL) + ', bR =' +str(self.bR)
备注:
- 只在一个函数中执行一个
return
语句,在你的代码中只执行你的函数 returns self.bT (最后一个)。
- 在提供的代码中
def __repr__(self)
没有缩进。
- 您不需要 4 个点来定义一个矩形。
- 你的矩形角不应该只是整数,它们必须是两个坐标 (x, y) 的序列,例如 (3, 7) 是一个点,将一个点实现为 2 个整数的元组或列表。
编辑:
正如 OP 所问,这是更改 __init__
方法以使用笛卡尔坐标的方法:
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
而不是那个,然后你将两个 Point
传递给 __init__
来定义矩形。
希望对你有所帮助!
首先,函数不能有一个以上的return语句。
此外,def __repr__(self):
没有正确缩进(它属于矩形 class)。
您可能更喜欢 __str__
而不是 __repr__
,请参阅 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()
我是 python 的新手。我需要创建一个 python Rectangle
对象 class ,当调用它时可以打印角的坐标以及面积和周长。当我尝试 运行 我的代码时遇到问题:
<__main__.Rectangle instance at 0x02F20030>
有人告诉我也要添加 __str__
但后来我得到:
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
试试这个:
def __repr__(self):
return 'tL = '+str(self.tL) + ', tR ='+ str(self.tR)+', bL ='+ str(self.bL) + ', bR =' +str(self.bR)
备注:
- 只在一个函数中执行一个
return
语句,在你的代码中只执行你的函数 returns self.bT (最后一个)。 - 在提供的代码中
def __repr__(self)
没有缩进。 - 您不需要 4 个点来定义一个矩形。
- 你的矩形角不应该只是整数,它们必须是两个坐标 (x, y) 的序列,例如 (3, 7) 是一个点,将一个点实现为 2 个整数的元组或列表。
编辑:
正如 OP 所问,这是更改 __init__
方法以使用笛卡尔坐标的方法:
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
而不是那个,然后你将两个 Point
传递给 __init__
来定义矩形。
希望对你有所帮助!
首先,函数不能有一个以上的return语句。
此外,def __repr__(self):
没有正确缩进(它属于矩形 class)。
您可能更喜欢 __str__
而不是 __repr__
,请参阅 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()