[Tutor] FW: Can this be done easly

Peter Otten __peter__ at web.de
Sun Sep 19 20:07:05 CEST 2010

Roelof Wobben wrote:

> For this exercise :
>
> 3.Write a function named move_rect that takes a Rectangle and two
> parameters named dx and dy. It should change the location of the rectangle
> by adding dx to the x coordinate of corner and adding dy to the y
> coordinate of corner.
>
> Is this one of the possible solutions :
>
> class Point:
>     def __init__(self, x=0, y=0):
>         self.x = x
>         self.y = y
>
> class Rectangle(object):
>     def __init__(self, base_point, width=0, length=0):
>         self.base_point = base_point
>         self.width = width
>         self.length = length
>
> def moverect(rectangle, dx, dy):
>     rechthoek.base_point.y += dy
>     rechthoek.base_point.x +=dx
>     return rechthoek
>
> punt = Point(3,4)
> rechthoek = Rectangle (punt,20,30)
> test = moverect (Rectangle, 4,3)
> print rechthoek.base_point.x

At first glance I'd say so. At second glance I see that you pass the class
and not an instance to the moverect() routine. Your program only seems to
work because you are not using the parameter rectangle but the global
rechthoek variable and as soon as you are trying to move rectangles with a
different variable name everything will break.
If I were to run your program I might even find more errors or problematic
behaviours.

In the long run it's not a sustainable model to verify the correctness of
your programs by asking someone on the internet who is just as likely to be
wrong as you or might even fool you.

position and then check if the new position meets your expectation:

r = Rectangle(Point(3, 4), 20, 30)

moverect(r, 10, 11)

if r.base_point.x == 13 and r.base_point.y == 15:
print "looks good"
else:
print "needs work"

Because tests are needed very often there are libraries accompanying the
interpreter (unittest, doctest) to formalize them and for simple runtime
checks there is the assert statement. Instead of the if...else you could
write

assert r.base_point.x == 13, "wrong x position %d" % r.base_point.x
assert r.base_point.y == 15, "wrong y position %d" % r.base_point.y

Peter