2016-03-01 84 views
0

所以我想这样做:如何编写一个Python矩形类?

创建一个名为Rectangle具有以下属性和方法的类(样品运行每种方法包括):

  1. 每个实例都应该有一个X,Y,宽度和高度属性。

  2. 您应该能够通过创建矩形时的属性如下,(其中x = 5,Y = 10,宽度= 50,以该顺序高度= 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) 
    

我想不出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()) 

任何帮助深表感谢。

+0

请注意使用你的缩进,你想成为类的一部分的函数需要被缩进为'def __init __()' –

+0

它会一直给我一个错误,如果我缩进其余部分... – whatamii

+0

预期会发生什么'width(-1)'只有40的时候调用''Rectangle''吗? – Kupiakos

回答

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) 

注意,我没有看太密切关注类...您的变量可能被命名为不同的...我也认为在实际的代码,你有正确的缩进...

+0

我知道defs应该缩进,但当我缩进它告诉我意想不到的缩进错误,我想不通为什么 – whatamii

+0

等.. .go凹痕我是一个傻瓜 – whatamii

+0

Joran,我有其他部分通过固定缩进工作,但我无法弄清楚如何定义amt,我需要-5,但不能得到它代码正确 – whatamii