Shine Getter: Needing a better understanding of arrays


Here is my code:
coinIndex = 0
coins = self.findItems()
coin = coins[coinIndex]
if coin.value == 3:
self.moveXY(coin.pos.x, coin.pos.y)
coinIndex += 1
coinIndex += 1

I can solve this level is a different fashion easily, but I was hoping to know why my character picks up 8 gold coins perfectly and then the “tmp26 is undefined” error comes up on my “if coin.value == 3” line. I’m not certain if I need to use a while loop to compare the coins to coinIndex. Any insights on what could be fixed on this code is appreciated.


apologies for the indenting of the code. Its my first post and it looks great in the preview but not in the posting. Another thing to learn I guess


I think it says in the guidelines, but did you try posting your code with 3 ` ? Then it should show up right with all the indents.


enemy = self.findNearestEnemy()
if enemy:

I’m still new but the only thing that looks different from what I’ve tried is putting the coins=self.findItems() above the loop:


If there’s only 10 coins, and coinIndex goes to 11, your code will break.

Rhetorical Question: If you pick coins[0], what happens to coins[0] when you next run self.findItems()?

Once you find the answer to that question, you should be able to deduce why your code broke.


@chale - Try replacing if coin.value == 3 with: if coin and coin.value == 3.

This checks for coin also. I think your loop was breaking because of unavailability of coin of value 3 and trying to pick it up.

Also notice that in my correction ‘if coin and coin.value == 3’, coin comes first and them coin.value. This is the order how the python compiler reads it. Only when coin is true, coin.value == 3 is checked. So, no errors for coin not being on the map.

What I suggested is equivalent to:

if coin:
    if coin.value == 3:
        self.moveXY (coin.pos.x, coin.pos.y)



Thanks for the explanation. It helps for the specific level, but more importantly helps me to understand how arrays work.


I’ll have to try that. After all the work to get the indenting right it is nice to have a way to get it to show up right in the forums.