I'm working on moving a robot around a 2d grid room of 8 x 8, and one part is initialising the sensors which consist of the closest 5 tiles around the robot.
self.sensors = [0 for x in xrange(5)]
here I'm creating an empty of array of 5 elements.
but when I attempt to set the value of sensors like this:
if self.heading == 'East':
self.sensors[0] = self.room[self.x, self.y-1]
self.sensors[1] = self.room[self.x+1, self.y-1]
self.sensors[2] = self.room[self.x+1, self.y]
self.sensors[3] = self.room[self.x+1, self.y+1]
self.sensors[4] = self.room[self.x, self.y+1]
I get the error of 'list indices must be integers, not tuples'.
The problem comes from your
self.room
.Beacuse this:
Is the same of:
And that's your
tuple
error.There are two possibilities:
self.room
is a 2D array, which means that you probably meant something like:you wanted to slice
self.room
:Please provide more information about
self.room
.what is the type of self.room, i think room is a list in this case you have to assign like this
or like this
like this
self.room[self.x, self.y-1]
indexesself.room
with a tuple. If it is a ragged array then you must useself.room[self.x][self.y-1]
instead.You say
self.room
is a "2d grid" -- I assume it is a list of lists. In this case, you should access its elements asinstead of indexing the outer list with the pair
self.x, self.y-1
.Why does it give that error? I'm not passing any tuples!
Because
__getitem__
, which deals with[]
resolution, convertsself.room[1, 2]
to a tuple:and lists are not made to deal with such arguments.
More examples at: https://stackoverflow.com/a/33086813/895245
This is because list indices must be integers, not anything else. In your case, you are trying to use tuples.
Your code is particularly odd, because there is no way you ever created
self.room
with tuple indices.