2014-12-01 4 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):' –

+0

Если вы не хотите изменять оригинальный прямоугольник, вам нужно создать новый. Как вы можете создать второй прямоугольник и какой размер/форму он должен иметь? – Cuadue

ответ

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

+0

@qaguy Я обновил свой ответ. Теперь он должен решить вашу проблему. –

+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

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) 
Смежные вопросы