2016-03-01 68 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