Python can';I don’我似乎没有从我的班上得到什么成果

Python can';I don’我似乎没有从我的班上得到什么成果,python,class,Python,Class,我似乎不知道我的代码出了什么问题,为什么我什么也没说出来。我似乎也不知道如何展开矩形。 以下是说明: 创建一个名为expand的方法,该方法获取偏移值并返回在所有方向上用偏移展开的矩形的副本 >>> r = Rectangle(30, 40, 100, 110) >>> print(r) Rectangle(30, 40, 100, 110) >>> r1 = r.expand(offset=3) >>>

我似乎不知道我的代码出了什么问题,为什么我什么也没说出来。我似乎也不知道如何展开矩形。 以下是说明: 创建一个名为
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())

您需要使用由偏移量添加的矩形点从展开创建新对象

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)
或者更通用,以防将来过载

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
语句。

尝试从
def expand(self,offset)开始:
如果不想修改原始矩形,则需要创建一个新矩形。如何创建第二个矩形,它应该有多大/多大的形状?谢谢大家的帮助!,我仍然不知道为什么我的代码没有错误,但我仍然没有得到任何东西来打印?@qagoy我已经更新了我的答案。现在它应该解决你的问题了。我想添加一个方法,用一个简单的对或错的答案覆盖一个点是否在矩形的内部或线上或外部,不知道该做什么,这就是我到目前为止得到的结果
def contains_point(self,contains_point):返回(contains_point>=self.x或contains_point=self.y或contains_point@qagui也许您应该定义它
def contains_point(self,x,y)
并使用x y进行检查。否则必须定义点类或使用tuple@qagui现在您有了输出,然后我认为您可以接受答案并继续自己探索python的威力:)祝您旅途愉快。
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())