2014-12-01 64 views
-2

我似乎無法弄清楚我的代碼出了什麼問題,爲什麼我沒有得到任何東西。我似乎也無法弄清楚如何展開矩形。 這是說明: 創建一個名爲expand的方法,該方法接受一個偏移值並返回在所有方向上擴展偏移的矩形的副本。似乎無法從我的課上得到輸出

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

>>> r1 = r.expand(offset=3) 
>>> print(r1) 
    Rectangle(27, 37, 106, 116)  

原來的矩形不應該被修改。

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

負值應該返回一個縮小的矩形。

>>> r2 = r.expand(-5) 

>>> print(r2) 
    Rectangle(35, 45, 90, 100) 

這是我到目前爲止有:

class Rectangle: 

    def __init__(self, initx, inity, initw, inith): 

     self.x = initx 

     self.y = inity 

     self.w = initw 

     self.h = inith 

    def __str__(self): 
     return('Rectangle(' + str(self.x) + ',' + str(self.y) + ',' 
          + str(self.w) + ',' + str(self.h)+')') 
    def right(self): 
     return self.x + self.w 


    def top(self): 
     return self.y + 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): 
    # can't figure this part out 


    r = Rectangle(5,10,50,100) 
    r2 = Rectangle(5,10,50,100) 
    r3 = Rectangle(3,5,10,20) 
    r4 = Rectangle(12,10,72,35) 
    r5 = Rectangle(5,7,10,6) 
    r6 = Rectangle(1,2,3,4) 


    print(r2) 

    print(r3.right()) 

    print(r4.right()) 

    print(r5.top()) 

    print(r6.size()) 

    print(r6.position()) 

    print(r6.area()) 
+0

嘗試從'def expand(self,offset)開始:' – 2014-12-01 22:55:53

+0

如果您不想修改原始矩形,那麼您需要創建一個新的矩形。你如何創建第二個矩形,它應該具有多大的尺寸/形狀? – Cuadue 2014-12-01 23:00:41

回答

1
def expand(self,expand): 
    return Rectangle(self.x - expand, self.y - expand, self.w + 2*expand, 
         self.h + 2*expand) 

或針對未來超負荷更通用....

def expand(self,expand): 
    return type(self)(self.x - expand, self.y - expand, self.w + 2*expand, 
         self.h + 2*expand) 

而且....什麼負面的尺寸是多少?也許是更好的解決它在構造函數中:

def __init__(self, initx, inity, initw, inith): 
    self.x = initx 
    self.y = inity 
    self.w = max(0,initw) 
    self.h = max(0,inith) 

最後,我們可以談論這個問題的主題:似乎無法從我的類得到的輸出。也許是一個縮進問題,我會通過我的方法重寫你的腳本並修復縮進問題。

class Rectangle: 

    def __init__(self, initx, inity, initw, inith): 
     self.x = initx 
     self.y = inity 
     self.w = max(0,initw) 
     self.h = max(0,inith) 

    def __str__(self): 
     return('Rectangle(' + str(self.x) + ',' + str(self.y) + ',' 
          + str(self.w) + ',' + str(self.h)+')') 
    def right(self): 
     return self.x + self.w 

    def top(self): 
     return self.y + 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,expand): 
     return type(self)(self.x - expand, self.y - expand, self.w + 2*expand, 
         self.h + 2*expand) 


r = Rectangle(5,10,50,100) 
r2 = Rectangle(5,10,50,100) 
r3 = Rectangle(3,5,10,20) 
r4 = Rectangle(12,10,72,35) 
r5 = Rectangle(5,7,10,6) 
r6 = Rectangle(1,2,3,4) 

print(r2) 
print(r3.right()) 
print(r4.right()) 
print(r5.top()) 
print(r6.size()) 
print(r6.position()) 
print(r6.area()) 

現在它應該可以按照您的預期工作。在你的代碼中,你已經在類定義中加入了變量定義和print語句。

+0

謝謝大家的幫助!,我仍然不確定爲什麼我的代碼沒有錯誤,但我仍然沒有得到任何打印? – qaguy 2014-12-02 01:12:15

+0

@qaguy我已經更新了我的答案。現在它應該解決您的問題。 – 2014-12-02 08:04:14

+0

我想添加一個方法,如果某個點位於矩形的內部或外部,或者在矩形的外部有一個簡單的真或假答案,不知道該怎麼做,這就是我目前爲止所做的。 'def contains_point(self,contains_point): return(contains_point> = self.x或contains_point <= self.x + self.w 且contains_point> = self.y或contains_point <= self.h)' – qaguy 2014-12-02 23:37:08

0

您需要使用一個偏移添加您的矩形點創建展開一個新的對象。

def expand(self, offset): 
    # can't figure this part out 
    return type(self)(self.x - offset, self.y - offset 
       self.w + offset, self.h + offset) 
相關問題