[Tutor] list question
Dave Angel
davea at ieee.org
Tue Aug 11 16:07:41 CEST 2009
Wayne wrote:
> On Tue, Aug 11, 2009 at 7:17 AM, <proportional at msn.com> 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
More information about the Tutor
mailing list