1.编写一个函数move_rectangle,它接受一个Rectangle对象和两个值dx、dy。它应该通过将dx添加到角的x坐标并将dy添加到角的y坐标来更改矩形的位置。因为这个练习涉及到很多前面的例子和练习,不写出来可能看不懂,所以把需要覆盖的放上去。先写出来。首先我们定义一个类型叫做类:classPoint(object):'''表示二维空间中的一个点。'''print(Point)然后我们建立一个矩形类:classRectangle(object):'''代表一个矩形属性:width,height,corner。'''box=Rectangle()box.width=100.0#矩形宽度box.height=200.0#矩形高度box.corner=Point()#corner是Point的一个对象,用来指定下边的固定点左角box.corner.x=0box.corner.y=0然后下面是练习的代码。这个功能比较容易。形参一共有三个,一个是对象,另外两个值作用于角坐标,结果如下defmove_rectangle(rect,dx,dy):rect.corner.x+=dxrect.corner。y+=dymove_rectangle(box,10,20)print_point(box.corner)(10,20)对象可以复制,我们可以使用复制模块来复制对象,但是复制分为浅复制和深复制deepcopyimportcopybox2=copy.copy(box)box2isbox#box2==box#willalsoReturnFalsebecausethedefaultbehaviorof==forinstancesisthesameasFalsebox2.cornerisbox.corner#Thisindicatesthatcopy复制了object本身但不复制嵌入的Point对象,这称为shallowcopyTrue下面是深复制的例子它们所指的对象等等,也就是把上面例子中的所有box3.cornerisbox.cornerFalse复制过来,而做法是对m让下面的连接容易理解2.写一个版本的move_rectangle,它会创建并返回一个Rectangle对象,而不是直接修改已有的对象来分解这个问题,不直接修改对象移动首先,您需要复制矩形。不能用浅拷贝的原因是矩形虽然复制了,但是它们共享一个角,所以原来的矩形实际上是移动了,所以需要用深拷贝,但是需要得到一个新的对象。我想知道是否可以使用四个参数,第二个参数用于复制第一个参数,但需要先做一个简短的实验;defa(rect,rect1):rect1=copy.copy(rect)a(box,box1)--------------------------------------------------------------------NameErrorTraceback(最近调用last)in1defa(rect,rect1):2rect1=copy.copy(rect)---->3a(box,box1)NameError:name'box1'isnotdefined所以使用四个参数的方法是有问题的,如果这个参数没有被定义过就会报错,所以只能使用三个参数。后来想把函数里的对象copy出来,赋值给一个全局对象。后来发现如果用return的话,就不用全局对象了。importcopydefmove_rectangle_copy(rect,dx,dy):#globalrect1rect1=copy.deepcopy(rect)rect1.corner.x+=dxrect1.corner.y+=dy返回rect1move_rectangle(box,10,20)print_point(rect1.corner)结果是正确的,但是上面的代码好像可以用之前学过的问题识别方法进行简化,复制对象后面的函数可以换成前面的函数:importcopydefmove_rectangle_copy(rect,dx,dy):rect1=copy.deepcopy(rect)move_rectangle(rect1,dx,dy)re转rect1move_rectangle(box,10,20)print_point(rect1.corner)这样代码会稍微精简一下