Wayne wrote:
On Tue, Aug 11, 2009 at 7:17 AM, <[email protected]> wrote:

 hi i am currently doing the 'livewires' python tutorial lesson 5. i am
making a little game that makes a few squares chase a circle around a little
grid. i can get the 1 square acting on 1 variable to come up, but the
tutorial now wants me to create a list of variables that act under the same
class.

this is what i have to make the 1 square appear (which works)(i have also
cut a lot of the program out to make this email smaller.)

class Robot:
    pass

def place_robot():
    global robot
    robot = Robot()
    robot.x=random_between(0,63)
    robot.y=random_between(0,47)
    draw_robot()
    print robot.x

and i cant figure out what to write to make the variable 'robot' work as a
list, and then follow all the instructions 3 times. this is what i tried to
put in.

class Robot:
    pass

def place_robot():
    global robot
    r1 = Robot()
    r2 = Robot()
    r3 = Robot()
    robot = [r1,r2,r3]
    robot.x=random_between(0,63)
    robot.y=random_between(0,47)
    draw_robot()
    print robot.x

i was under the assumption that the instruction
robot.x=random_between(0,63) would return a value 3 times for r1 r2 and r3,
but instead i get AttributeError: 'list' object has no attribute 'x'. so i
got no idea heh. i hope this makes sense, as im really new to programming.


I think what you want is:

for r in robot:
    r.x = random_between(0,63)
    r.y = random_between(0,47)
    draw_robot()
    print r.x

Now for the why:
robot is a list of objects - you declared it such with robot = [r1, r2, r3]
(incidentally you could just do robots = [Robot(), Robot(), Robot()] ), and
lists don't have x y attributes, which you're trying to access. I presume
you're really trying to access the x y attributes of your Robot() class,
which is an entirely different object from your list.

HTH,
Wayne

This illustrates the danger of global variables. The draw_robot() function probably accesses the global variable robot, which has now changed its meaning. So probably it should be a method of the Robot class, in which case you'd use
        r.draw_robot()

Alternatively, if it must be a function rather than a method, you should add a parameter to it, and call it as
       draw_robot(r)

If this were my code, I'd probably have created a new global variable robots, indicating that it's now a list. And change the function place_robot() to place_robots().

DaveA

_______________________________________________
Tutor maillist  -  [email protected]
http://mail.python.org/mailman/listinfo/tutor

Reply via email to