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