如何编写Python矩形类?

时间:2016-03-01 19:58:19

标签: python

所以我想这样做:

使用以下属性和方法创建名为Rectangle的类(包含每个方法的示例运行):

  1. 每个实例都应具有x,y,width和height属性。

  2. 您应该能够在创建矩形时传递属性,如下所示(其中x = 5,y = 10,width = 50,height = 100依次):

    r = Rectangle(5, 10, 50, 100)        
    
  3. 创建一个将矩形作为字符串返回的方法(提示:实现 str )。对于属性值为x = 5,y = 10,width = 50,height = 100的矩形对象,它应返回字符串Rectangle(5, 10, 50, 100)

    >>> r2 = Rectangle(5, 10, 50, 100)
    >>> print(r2)
      Rectangle(5, 10, 50, 100)      
    
  4. 创建一个名为right的方法,该方法获取矩形右边缘的值。它不应该争论:

    >>> r3 = Rectangle(3, 5, 10, 20)
    >>> r3.right()
      13     
    
    >>> r4 = Rectangle(12, 10, 72, 35)
    >>> r4.right()
      84 
    
  5. 创建一个名为bottom的方法,该方法获取矩形底边的值。

    >>> r5 = Rectangle(5, 7, 10, 6)
    >>> r5.bottom()
      13      
    
    >>> r5.y += 12    
    >>> r5.bottom()
      25         
    
  6. 创建一个名为size的方法,返回矩形的宽度和高度。

    >>> r6 = Rectangle(1, 2, 3, 4)
    >>> r6.size()
      (3, 4) 
    
  7. 创建一个名为position的方法,返回矩形的x和y坐标。

    >>> r6.position()
      (1, 2) 
    
  8. 创建一个名为area的方法,返回矩形区域。

    >>> r6.area()
      12     
    
  9. 创建一个名为expand的方法,该方法采用偏移值并返回在所有方向上以偏移量展开的矩形的副本。

    >>> r = Rectangle(30, 40, 100, 110)
    >>> r    
      Rectangle(30, 40, 100, 110)
    
    >>> r1 = r.expand(offset=3) 
    >>> r1    
      Rectangle(27, 37, 106, 116)    
    

    不应修改原始矩形。

     >>> r
      Rectangle(30, 40, 100, 110)
    

    负值应返回缩小的矩形。

    >>> r.expand(-5)
      Rectangle(35, 45, 90, 100)
    
  10. 我无法弄清楚9号,但我相信我做的其他事情是正确的,这是我到目前为止:

    class Rectangle:
    
        def __init__(self, X, Y, W, H):
    
           self.x = X
    
           self.y = Y
    
           self.w = W
    
           self.h = H
    
        def complete(self):
            return self.x,self.y,self.w,self.h
    
        def right(self):
            return self.x + self.w
    
        def __str__(self):
            return('Rectangle(' + str(self.x) + ',' + str(self.y) + ','
                        + str(self.w) + ',' + str(self.h)+')')
        def bottom(self):
            return self.y + self.h
    
        def __str__(self):
            return('Rectangle(' + str(self.y) + ',' + str(self.h) + ','
                   + str(self.y) + ',' + str(self.h) + ')')
        def size(self):
            return self.w,self.h
    
        def position(self):
            return self.x,self.y
    
        def area(self):
            return self.w * self.h
    
        def expand(self):
            pass
    
    print(Rectangle(5,10,50,100).complete())
    
    print(Rectangle(3, 5, 10, 20).right())
    
    print(Rectangle(12, 10, 72, 35).right())
    
    print(Rectangle(5,7,10,6).bottom())
    
    print(Rectangle(1,2,3,4).size())
    
    print(Rectangle(1,2,3,4).position())
    
    print(Rectangle(1,2,3,4).area())
    

    非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

def expand(self,amt):
    x = self.x - amt # move left side out by amount specified
    y = self.y -  amt # move the top side up by the specified amt
    w = self.width + amt * 2 # make the width long enough so the left side and right side are both expanded by amount
    h = self.height + amt * 2 # make the height tall enough so both top and bottom are expanded  
    return Rectangle(x,y,w,h)

请注意,我没有仔细查看您的课程...您的变量可能会被命名为不同...我还假设在您的实际代码中您有正确的缩进...