[Tutor] function error
ALAN GAULD
alan.gauld at btinternet.com
Sat Oct 2 22:34:52 CEST 2010
> ##############################################################################
> import turtle, random
>
> def checkForward(distance):
> old_position = turtle.position()
> turtle._pen.up()
> turtle.forward(distance)
> forward_failed = outOfBounds()
you set forward failed but never use it?
> turtle.setx(old_position[0]); turtle.sety(old_position[1])
> turtle._pen.down()
> if outOfBounds() == 'false':
> turtle.forward(distance)
If you change outOfVBounds to return a real boolean result you can just say
if outOfBounds():
etc...
> def stuck():
> return forward_failed
forward failed does not exist here it is a local variable in checkForward.
If you want to use it like this you need to create it as a global
variable outside any of the function bodies.
> def outOfBounds():
> if (abs(turtle.position()[0]) > turtle.window_height()/2) or
> (abs(turtle.position()[1]) > turtle.window_width()/2):
> return "true"
> else:
> return "false"
You can miss the if statement and just return the expression,
that will give you a real True/False boolean result which is
easier to work with than strings.
return (abs(turtle.position()[0]) > turtle.window_height()/2) or
(abs(turtle.position()[1]) > turtle.window_width()/2)
However does this test check for out of bounds in all directions?
What happens if the turtle is travelling west/south rather than
east/north? It may work but I don't see it.
> def randomMove2(d1, d2, a1, a2):
> while 1:
This is usually written as while True: nowadays
> turtle.left(random.uniform(a1,a2))
> checkForward(random.uniform(d1,d2))
> if outOfBounds() == 'true':
> turtle.right(180)
I don;t know iof any of that solves the probnl;em but it
might tidy the code a little
HTH,
Alan G.
More information about the Tutor
mailing list